概念
位置非常关键,中间必须在需要执行中间件的路由前面
const app = require("express")();
//每次调用接口时都会经过use里面函数,req和res跟get里的一样,next是中间件执行完成后执行下一步的get请求
app.use((req,res,next) => {
console.log('12312312312312312312');
next()
})
app.get('/',(req,res) => {
res.send('/')
})
app.listen(8080, () => {
console.log("http://127.0.0.1:8080");
});
中间件分类
应用程序中间件
app.use((req, res, next) => {
console.log("12312312312312312312");
next();
});
限制请求方法中间件
//先执行111,然后222,222之后在想处理就在222的函数上加next
app.get(
"/user",
(req, res, next) => {
console.log("111");
next();
},
(req, res) => {
console.log("222");
res.send();
}
);
路由中间件
const express = require("express");
const router = express.Router();
router.get("/", (req, res) => {
console.log(req.method);
res.send("/index");
});
router.get("/users", (req, res) => {
console.log(req.method);
res.send("/users");
});
module.exports = router;
//前缀为/a,必须要/a在接/users
app.use("/a", router);
错误处理中间件
//前面路由都没匹配到执行这个
app.use((req, res, next) => {
res.status(404).send("404 Not Found");
});
//错误处理中间件,如果app.use里接受到的函数有4个参数那就是错误处理中间件
app.use((err, req, res, next) => {
console.log(err);
res.status(500).send("服务器发生错误");
});
内置中间件
www.expressjs.com.cn/4x/api.html…
路由中间件也是内置的一种,还有前面遇到的
app.use(express.urlencoded())
app.use(express.json())
第三方中间件
www.expressjs.com.cn/resources/m…
cors---解决跨域问题
npm i cors
const cors = require('cors');
app.use(cors())
morgan---日志
npm i morgan
const morgan = require('morgan');
app.use(morgan('dev'))//开发模式下
补充
可以链式调用
app.get().post()
router.get().post()
响应方法
//返回需要客户端下载的资源
res.download()
//与原生的end一样
res.end()
//返回json数据
res.json()
//重定向
res.redirect()
//渲染数据模板
res.render()
//响应状态码
res.statsus()
//返回文本
res.send()
注:可以链式调用