express中间件

什么是中间件app.get("/news/:id", (req, res) => {});中的(req,res)=>{}就是一个express中间件

当匹配到请求后,交给第一个处理函数来处理(给第三个参数next)

js 复制代码
const express = require("express");
const app = express(); // 创建一个express应用
console.log(process.env.NODE_ENV);

app.get(
    "/news",
    (req, res, next) => {
        console.log("handler1");
        next();
    },
    (req, res, next) => {
        console.log("handler2");
        next();
    }
);

app.get("/news", (req, res, next) => {
    console.log("handler3");
    next();
});

const port = 5008;
app.listen(port, () => {
    console.log(`server listen on ${port}`);
});

但是客户端得到的会是404:因为在上边的代码中,最后一个请求之后没有请求了,但是后边也没有end,所有服务器响应没有结束会返回404

  • 中间件处理的细节
    • 如果后续没有了中间件,express发现如果没有结束,会响应404
    • 如果中间件发生了错误,不会停止服务器,相当于调用了next(错误对象),寻找后续的错误处理中间件,如果没有后续的中间件,服务器会响应500。

处理错误的中间件

js 复制代码
module.exports = (err, req, res, next) => {
    if (err) {
        const errObj = {
            code: 500,
            msg: err instanceof Error ? err.message : err,
        };
        // 发生了错误
        res.status(500).send(errObj);
    } else {
        next();
    }
};

使用app.use("/news",require("处理错误的中间件的路径"))

可以匹配: /news 、/news/abc、 /news/ab/asd

不能匹配:/n、/a、/、/newsabc

中间件可以获取到请求的基地址req.baseUrl 比如上边例子的基地址为/news

  • 给静态资源
js 复制代码
module.exports = (req, res, next) => {
    if (req.path.startsWith("/api")) {
        // 说明你请求的是 api 接口
        next();
    } else {
        // 说明你想要的是静态资源
        if (true) {
            res.send("静态资源");
        } else {
            next();
        }
    }
};
相关推荐
徐同保1 分钟前
n8n创建凭据连接Google Sheets API
前端
houyhea9 分钟前
AI智能体浪潮下的前端演进:一场螺旋上升的轮回
前端·agent
LYFlied10 分钟前
【每日算法】LeetCode 146. LRU 缓存机制
前端·数据结构·算法·leetcode·缓存
半桶水专家11 分钟前
vue中的props详解
前端·javascript·vue.js
程序员卷卷狗15 分钟前
为什么MySQL默认使用可重复读RR?深入解析binlog与隔离级别的关系
数据库·mysql
HIT_Weston15 分钟前
65、【Ubuntu】【Gitlab】拉出内网 Web 服务:Gitlab 配置审视(九)
前端·ubuntu·gitlab
b***748817 分钟前
前端的未来不是框架之争,而是数字体验能力的全面竞争
前端
Lunar*23 分钟前
[开源] 纯前端实现楼盘采光模拟工具:从2D规划图到3D日照分析
前端·3d
白兰地空瓶26 分钟前
一行 npm init vite,前端工程化的世界就此展开
前端·vue.js·vite
LYFlied26 分钟前
【每日算法】LeetCode 23. 合并 K 个升序链表
前端·数据结构·算法·leetcode·链表