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();
        }
    }
};
相关推荐
beibeibeiooo20 分钟前
【ES6】04-对象 + 类 + 模板字符串 + 解构 + 字符串
前端·javascript·es6
冴羽32 分钟前
SvelteKit 最新中文文档教程(6)—— 状态管理
前端·javascript·svelte
徐小黑ACG36 分钟前
个人blog系统 前后端分离 前端js后端go
开发语言·前端·javascript·vue.js·golang
拉不动的猪2 小时前
刷刷题39(同一组件中的不同的标签页如何实现通信)
前端·javascript·面试
拉不动的猪2 小时前
刷刷题37(vue3的优化点)
前端·javascript·面试
家里有只小肥猫2 小时前
关于新奇的css
前端·css
南雨北斗2 小时前
jquery ajax 返回TP6错误信息的调试方法
前端·后端
星星不打輰2 小时前
css的显示模式
前端·css
代码CC3 小时前
Vue.js+Element UI 登录界面开发详解【附源码】
前端·vue.js·ui·elementui
无名之逆3 小时前
Hyperlane:Rust 语言打造的 Web 后端框架新标杆
开发语言·前端·网络·网络协议·rust·github·ssl