express中间件

94 阅读1分钟

概念

位置非常关键,中间必须在需要执行中间件的路由前面


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()

注:可以链式调用