【发布时间】:2020-07-09 19:48:59
【问题描述】:
内置app.use(express.json())和app.get('/', () => res.send('Hello'))等中间件函数。
听说也可以叫中间件函数,不知道“内置中间件函数”是不是最好的称呼。他们是终止循环还是自动调用next() 方法,将控制权传递给下一个中间件函数?
【问题讨论】:
标签: node.js middleware
内置app.use(express.json())和app.get('/', () => res.send('Hello'))等中间件函数。
听说也可以叫中间件函数,不知道“内置中间件函数”是不是最好的称呼。他们是终止循环还是自动调用next() 方法,将控制权传递给下一个中间件函数?
【问题讨论】:
标签: node.js middleware
app.get 或 app.use 都不是中间件函数。中间件函数是您作为回调传递给app.get、app.use、...的函数。
在 express 中,中间件函数也有一个预定义的签名
function(req: express.Request, res: express.Response, next: express.NextFunction)
或
function(err: Error, req: express.Request, res: express.Response, next: express.NextFunction)
取决于是正常的还是错误的中间件。
任何对传入请求进行操作并具有上述签名的函数都可以称为中间件函数。
在 middeware 函数中只有两个可能的选项,要么向请求者发送响应,要么调用 next 函数将请求传递给下一个中间件(或者忘记执行其中的任何一个并且想知道为什么客户端似乎卡住了)。
所以,是的,像 body-parsers、loggers、session handlers 之类的东西确实会调用 next 函数,否则你自己的请求处理程序根本不会被执行(假设它们前面有提到的中间件函数)。
传递给app.get 的回调和类似的方法也是中间件函数,您可以在其中调用next 并继续使用另一个处理程序。示例
// these are global middleware functions - they process every request
app.use(middleware1)
app.use(middleware2)
app.use(middleware3)
// functions middleware4 and middleware5 are executed only when GET /
// request is received
app.get('/', middleware4, middleware5, (req, res) => {
return res.send({})
})
【讨论】:
它们会自动调用 next() 方法 .id 成功执行否则会抛出错误
中间件函数是可以访问请求对象 (req)、响应对象 (res) 和应用程序请求-响应周期中的下一个中间件函数的函数。 next 中间件函数通常由名为 next 的变量表示。 顾名思义,它位于某个事物的中间,即请求和响应周期 中间件可以访问请求和响应对象 中间件可以访问请求-响应生命周期的下一个功能 帖子图片 中间件函数可以执行以下任务: 执行任何代码。 更改请求和响应对象。 结束请求-响应周期。 调用堆栈中的下一个中间件。 如果当前中间件函数没有结束请求-响应循环,它必须调用 next() 将控制权传递给下一个中间件函数。否则,请求将被挂起。
【讨论】: