引入路由模块
let firstpageRoute = require('./routes/firstPage');
express
关联路由 使用矿建的中间件
all
里面写路径 指当前路由的守卫 写*
指所有的路由守卫
app.all("*", (req, res, next) => {
console.log("路由守卫");
next();
});
app.use()
直接添加路由模块 直接正常的路由
app.use(firstpageRoute);
关联的时候给当前路由模块添加路由路径 名称作为主路由
app.use('/index', firstpageRoute);
app.listen(8000, "127.0.0.1", () => {
console.log("服务器地址:", 'http://127.0.0.1:8000');
});
app.all('/', (req, res, next) => {
console.log("定位路由");
next();
});
get路由是通过地址访问的
app.get("/", (req, res) => {
console.log("首页");
res.send("express框架 get路由");
});
app.get("/login", (req, res) => {
res.send("登录界面路由");
});
**路由的路由可以写正则表达式 进行匹配路径**
**路由点后边写后缀名 /logo.html**
/logo? ?匹配前面的子表达式0次或者1次 /log /logo
/logo+ +匹配前面的子表达式1次或者多次 /logo /logoo ....
/lo*go *匹配前面的子表达式0次或者多次 保证输入和 表达式结尾一致
/logo/ 只要路径里面包含字符的路径
/.*fly$/ .匹配任意打印或者非打印字符 除过\n
app.get(/.*fly$/, (req, res) => {
res.send("正则匹配路由");
});
路由的动态传值
localhost://8000/login/:userid
路由动态传值 捕获的值 存在 req.params
app.get("/regest/:userid/:name",(req,res)=>{
//{"userid":"1","name":"maodou"}
res.send(JSON.stringify(req.params));
});
http://localhost:8000/regest/10086/hook/maodou
app.get("/regest/:userid/hook/:name",(req,res)=>{
//{"userid":"1","name":"maodou"}
res.send(JSON.stringify(req.params));
});
由连接字符 - 动态传值
http://localhost:8000/regest/FROM-EXp
app.get("/regest/:from-:to",(req,res)=>{
//{"from":"FROM","to":"EXp"}
res.send(JSON.stringify(req.params));
});
链接字符 . 动态传值
http://localhost:8000/regest/10086.maodou
app.get("/regest/:from.:to",(req,res)=>{
//{"from":"FROM","to":"EXp"}
res.send(JSON.stringify(req.params));
});
对路由的动态传值 可以进行正则表达式 验证格式
下面这个正则验证传值格式的时候 \ 得转义
app.get('/regest/:userid(\\d+)',(req,res)=>{
res.send(JSON.stringify(req.params));
});
路由的get传值
localhost:8000/login?id=10086&name=maodou
gei传值 接收的数据在 req.query这个属性上面
app.get("/regest",(req,res)=>{
res.send("注册界面"+JSON.stringify(req.query));
});
路由的线路 类似路由的守卫功能 可以多个执行
一个路由执行多个回调函数
app.get("/regest", (req, res, next) => {
// 代码
console.log("在regest里面检测");
next();
}, (req, res, next) => {
console.log("再次检测");
// 例如 这次路由检测不成功
if (false) {
next();
}
else {
//在这里跳过剩余的路由回调 走下个路由回调
next('route');
}
}, (req, res) => {
res.send("注册界面");
});
app.get("/regest", (req, res, next) => {
// 代码
console.log("在regest里面检测");
next();
}, (req, res, next) => {
console.log("再次检测");
next();
}, (req, res) => {
res.send("注册界面");
});
同名路由 组合线路
app.get("/regest", (req, res, next) => {
console.log(1);
next();
}, (req, res, next) => {
console.log(2);
if(false)
{
next();
}
else{
// 跳过剩余的路由回调 执行下一个路由
next('route');
}
}, (req, res, next) => {
console.log(3);
next();
});
app.get("/regest", (req, res, next) => {
console.log(4);
next();
}, (req, res, next) => {
console.log(5);
next();
}, (req, res) => {
console.log(6);
res.send("regest");
});
将路由的线路做成数组来处理
let fun1=(req,res,next)=>{
console.log(1);
next();
}
let fun2=(req,res,next)=>{
console.log(2);
res.send("注册");
}
app.get("/regest",[fun1,fun2]);
路由的route方法
模块化路由封装 链式
下面这种路由可以get 也可以post
form表单的方式 put 增加数据 insert delete update
app.route('/regest').get((req,res)=>{
res.send("注册");
}).post((req,res)=>{
res.send("post路由");
});
post 方式过来的路由 才能启动post路由
app.post("/dologin", (req, res) => {
res.send("express框架 post路由");
});
//监听服务器端口
app.listen(8000, '127.0.0.1', () => {
console.log("服务器启动成功!", 'http://127.0.0.1:8000');
});
路由封装
//封装首页的路由
let express = require('express');
//导出框架路由
let router = express.Router();
// 建立路由的模块
router.get("/", (req, res) => {
res.send("首页");
});
router.get("/blog", (req, res) => {
res.send("blog");
});
router.get('/info', (req, res) => {
//例如做检测
if (false) {
res.send("info");
} else {
// 重定向路由
res.redirect('/index/');
}
});