【问题标题】:Does the position of error handling middleware matter in express?错误处理中间件的位置在 express 中是否重要?
【发布时间】:2022-06-20 04:46:24
【问题描述】:

我只是好奇,因为我认为将中间件放在代码中的哪个位置并不重要,只要它在 app/index.js 中即可

我的意思是:

const express = require("express");
const mongoose = require("mongoose");
const dotenv = require("dotenv");
const cors = require("cors");

const app = express();
dotenv.config();

// MIDDLEWARE
app.use(express.json());
app.use(express.urlencoded({ extended: false }));

app.use(cors());

// ROUTES
const { errorHandler } = require("./middleware/errorMiddleware");
const goalRoutes = require("./routes/goalRoutes");

app.use("/api/goals", goalRoutes);

app.use(errorHandler);

如果我将 errorHandler 中间件放在这样的路由之上:

// MIDDLEWARE
const { errorHandler } = require("./middleware/errorMiddleware");
app.use(express.json());
app.use(express.urlencoded({ extended: false }));


app.use(cors());
app.use(errorHandler);

// ROUTES

const goalRoutes = require("./routes/goalRoutes");
app.use("/api/goals", goalRoutes);

errorHandler 不再起作用。 这种中间件的位置重要吗? 还有哪些其他类型的中间件需要放在合适的位置?

【问题讨论】:

    标签: node.js express error-handling middleware


    【解决方案1】:

    是的,中间件函数在 express 中的位置需要适当。

    在客户端请求和响应之间快速工作的中间件函数。每个中间件函数都可以访问请求、响应及其后面的中间件函数。中间件函数按照指定的顺序执行并跳过错误处理函数,直到它被调用。

    app.use(middleware1);
    app.use(middleware2);
    app.use(middleware3);
    

    在上面的例子中,middleware1会先被执行,然后调用middleware2,

    next();
    
    • 说 middleware2 是带有 next 函数的错误处理方法。除非发生错误,否则不会执行中间件 3。因为错误处理方法只有在被调用时才会执行。
    • 说 middleware2 是一个没有 next 函数的错误处理方法。 middleware3 根本不会执行。

    所以,错误处理函数必须在中间件堆栈的最后(也是在路由处理方法的最后)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-08
      • 1970-01-01
      • 1970-01-01
      • 2012-02-22
      • 1970-01-01
      • 1970-01-01
      • 2023-02-17
      相关资源
      最近更新 更多