Node.js 没有next的Express中间件功能
Node.js Express middleware function without next
在 Express 中间件中,它应该有 3 个参数:request、response、next。
但是,在我从书上复制的代码中的第2个中间件中,却只使用了request,response。这是什么原因?下一个是可选的吗?
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);
当您希望此请求的路由继续到下一个中间件或此请求的下一个路由处理程序时,将调用 next()
。通常有多个中间件可能会检查给定请求,因此如果您没有发送响应并希望继续正常路由此请求,那么您将在完成处理后调用 next()
并且您希望路由继续。
如果您已经发送了一个响应,因此不希望路由继续,那么您就不要调用 next()
。
是否声明参数next
由您决定。如果你从来没有打算调用它,那么你不需要将它声明为参数(它仍然是传递的,但如果你不打算使用它就不必声明它)。
因此,您可以使用参数 req
和 res
声明 middleware/requeset 处理程序,如下所示:
app.use("/someRoute", function(req, res) {
res.send("hello");
});
或者,使用参数 req
、res
和 next
,如下所示:
app.use("/someRoute", function(req, res, next) {
if (req.query.x) {
// don't handle this request here, let some other route
// handler following this handle it
next();
} else {
// send the response, no more route handlers after this
res.send("hello");
}
});
是否声明 next
参数对 Express 没有影响。如果您打算使用它,请声明它。如果您不打算使用它,则没有理由声明它,但无论如何它都会通过。所有 Javascript 函数参数都是如此。如果您不将所有参数都声明为命名参数,这只会使访问它们变得更加困难,但它们仍然存在(为了完整起见,仍然可以通过 arguments
对象访问)。
还有一个带有四个参数 (err, req, res, next)
的特殊情况路由处理程序,用于错误处理(当调用 next(err)
时),但这不是您的问题。 Express 确实使用四个声明不同的参数来处理路由处理程序。它将它们注册为错误处理程序。
express.js
有 4 种基本处理程序。
- 2 - 请求,资源
- 3 - 请求、结果、下一个
- 4 - 错误、请求、结果、下一个
如果你有 2 个参数,express 总是会为它们分配一个 req 和 res,不管你怎么称呼它们。它只是一个被 express 社区广泛使用的调用约定,它使代码更清晰、可读和可理解。
在 Express 中间件中,它应该有 3 个参数:request、response、next。 但是,在我从书上复制的代码中的第2个中间件中,却只使用了request,response。这是什么原因?下一个是可选的吗?
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);
next()
。通常有多个中间件可能会检查给定请求,因此如果您没有发送响应并希望继续正常路由此请求,那么您将在完成处理后调用 next()
并且您希望路由继续。
如果您已经发送了一个响应,因此不希望路由继续,那么您就不要调用 next()
。
是否声明参数next
由您决定。如果你从来没有打算调用它,那么你不需要将它声明为参数(它仍然是传递的,但如果你不打算使用它就不必声明它)。
因此,您可以使用参数 req
和 res
声明 middleware/requeset 处理程序,如下所示:
app.use("/someRoute", function(req, res) {
res.send("hello");
});
或者,使用参数 req
、res
和 next
,如下所示:
app.use("/someRoute", function(req, res, next) {
if (req.query.x) {
// don't handle this request here, let some other route
// handler following this handle it
next();
} else {
// send the response, no more route handlers after this
res.send("hello");
}
});
是否声明 next
参数对 Express 没有影响。如果您打算使用它,请声明它。如果您不打算使用它,则没有理由声明它,但无论如何它都会通过。所有 Javascript 函数参数都是如此。如果您不将所有参数都声明为命名参数,这只会使访问它们变得更加困难,但它们仍然存在(为了完整起见,仍然可以通过 arguments
对象访问)。
还有一个带有四个参数 (err, req, res, next)
的特殊情况路由处理程序,用于错误处理(当调用 next(err)
时),但这不是您的问题。 Express 确实使用四个声明不同的参数来处理路由处理程序。它将它们注册为错误处理程序。
express.js
有 4 种基本处理程序。
- 2 - 请求,资源
- 3 - 请求、结果、下一个
- 4 - 错误、请求、结果、下一个
如果你有 2 个参数,express 总是会为它们分配一个 req 和 res,不管你怎么称呼它们。它只是一个被 express 社区广泛使用的调用约定,它使代码更清晰、可读和可理解。