路由和中间件

一一对应 对应的请求方式和路径

一种映射关系,必须含有三个部分:请求方式请求url处理函数

app.get('/',function(){
    console.log(1);
})
app.post('/',()=>{})
app.put('/',()=>{})
app.delete('/',()=>{})
路由匹配规则:

匹配请求方式和路径,两者全部匹配就会调用后面的回调函数

路由的模块化
//express。js
//监听端口
constexp=require('express')
constrouther=require('./路由')
constapp=exp()
app.use(routher.routher)
​
//端口号
app.listen("8080",function(){
    console.log("http://127.0.0.1:8080");
})
//路由。js
constexpress=require("express")
constrouther=express.Router()
routher.get('/',function(){
    console.log("get");
})
​
routher.post('/',(req,res)=>{
    console.log("post");
})
module.exports.routher=routher
路由前缀

可以规定访问路由前使用什么前缀

app.use('/api',routher.routher)

中间件


上一个流程的结束是下一个流程的开始

本质:处理函数,处理函数中必须包含next参数

next函数的作用参数

当上一个中间件结束后调用next函数,next的作用指向下一个中间件或者是路由

定义中间件
constexpress=require('express')
constapp=express()
constmw=(req,res,next)=>{
    console.log("第一个中间件");
}
app.use(mw)//注册中间件
app.listen(80,()=>{
    console.log("http://127.0.0.1:80");
})
全局中间件

全局生效的中间件

客户端发起任何请求;到达服务器后,都会触发的中间件,叫全局生效中间件

constexpress=require('express')
constapp=express()
consta=(req,res,next)=>{
    console.log("第二个中间件");
    next()
}
constmw=(req,res,next)=>{
    console.log("第一个中间件");
    next()
}
app.use(a)
app.use(mw)
app.get('/',(req,res)=>{
    console.log("路由");
})
app.listen(80,()=>{
    console.log("http://127.0.0.1:80");
})
多个中间件之间共用一个req,res
constexpress=require("express");
constapp=express();
constmw= (req, res, next) => {
  req.time=Date.now();
  next();
};
consta= (req, res, next) => {
  console.log("第二个中间件");
  next();
};
​
app.use(mw);
app.use(a);
app.get("/", (req, res) => {
  console.log(req.time);
});
app.listen(80, () => {
  console.log("http://127.0.0.1:80");
});
局部中间件
constexpress=require("express");
constapp=express();
constmw= (req, res, next) => {
  req.time=Date.now();
  next();
};
consta= (req, res, next) => {
  console.log("第二个中间件");
  next();
};
app.get("/api",a, (req, res) => {
  console.log(req.time);
});
app.listen(80, () => {
  console.log("http://127.0.0.1:80");
});
注册多个局部生效的中间件
constexpress=require("express");
constapp=express();
constmw= (req, res, next) => {
  req.time=Date.now();
  console.log(11);
  next();
};
consta= (req, res, next) => {
  console.log("第二个中间件");
  next();
};
//                  共用同一个req,res
app.get("/api",[mw,a], (req, res) => {
  console.log(req.time);
});
app.listen(80, () => {
  console.log("http://127.0.0.1:80");
});
注意事项:

使用中间件一定要在路由之前注册

在中间件处理结束之后一定要调用next函数,不要再next函数之后再写其他代码

可以触发多个中间件

多个中间件和路由之间共用一个req,res

中间件分类:

应用级别的中间件--使用app.use,app.get,注册的中间件都是应用级别的中间件

路由级别的中间件--使用express.routher注册的中间件就是路由级别的中间

错误级别的中间件---存在第四个参数,err

内置中间件

experss.static---管理静态资源

express.json--处理json格式数据的中间件

experss.enurllcoded--处理表单格式数据的中间件

constexpress=require("express");

constapp=express();

// 中间件

app.use(express.json({extended:true}))

app.post('/',(req,res)=>{

console.log(req.body);

})

app.listen(80, () => {

console.log("http://127.0.0.1:80");

});

第三方中间件

自定义中间件

模拟express enurlcoded中间件,实现功能
name=zhangsan&password=123=>{},可以在req.body里面获取到这
constexpress=require("express");
constquerystring=require('querystring')
constapp=express();
app.use(function (req, res, next) {
letstr="";
// 监听数据请求的开始,数据开始上传开始触发
req.on("data", (chunk) => {
str+=chunk;
});
// 监听数据请求的结束,数据上传结束触发
req.on("end", () => {
// querystring.parse:将字符串类型的键值对数据(id=1&name=zhangsan)转化成对象格式({id:1})
// querystring.stringify:将对象格式的数据转化成字符串的键值对
req.body=querystring.parse(str);
next()
});
​
});
app.post("/", function (req,res) {
console.log(req.body);
});
app.listen(80, () => {
console.log("http://127.0.0.1:80");
});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值