Node.js Express中间件功能没有下一个

use*_*968 3 middleware node.js express

在Express中间件中,应该采用3个参数:request,response,next.但是,在我从书中复制的代码中的第二个中间件,但只使用请求,响应.这是什么原因?接下来是可选的?

var express = require("express");
var http = require("http");

var app = express();

app.use(function(request, response, next) {
    console.log("In comes a " + request.method + " to " + request.url);
    next();
});

app.use(function(request, response) {
    response.writeHead(200, { "Content-Type": "text/plain" });
    response.end("Hello, world!");
});

http.createServer(app).listen(3000);
Run Code Online (Sandbox Code Playgroud)

jfr*_*d00 13

next()当您希望此请求的路由继续到下一个中​​间件或此请求的下一个路由处理程序时,将调用此方法.通常有多个中间件可以检查给定的请求,因此如果您没有发送响应并希望正常路由继续此请求,那么您将next()在完成处理并且希望路由继续时调用.

如果您已经发送了响应,因此不希望路由继续,那么您不会打电话next().

您是否声明参数取决于您自己next.如果你从不打算调用它,那么你不需要将它声明为参数(它仍然被传递,但如果你不打算使用它,你不必声明它).


Jim*_*tor 5

随着express.js有4种基本的处理程序。

  • 2-req,res
  • 3-req,res,next
  • 4-err,req,res,next

如果您有2个参数,无论您如何称呼,express都会始终为其分配一个req和res。这只是快递社区广泛使用的一种调用约定,它使代码更清晰,可读性和可理解性。

  • 请注意: 错误处理中间件始终采用四个参数。您必须提供四个参数才能将其标识为错误处理中间件函数。即使不需要使用下一个对象,也必须指定它以维护签名。否则,下一个对象将被解释为常规中间件并且无法处理错误。 (2认同)