一件中间件是一个钩住路由过程的函数,在链中的某个点上执行一个任意的操作(取决于我们希望它做什么)。
一个中间件是一个钩住路由过程的函数,在链中的某个点上执行一个任意的操作(取决于我们希望它做什么)。
它通常用于编辑请求或响应对象,或在到达路由处理程序代码之前终止请求。
中间件被添加到执行堆栈中,就像这样。
app.use((req, res, next) => { /* */ })
这与定义路由类似,但除了Request和Response对象实例外,我们还有一个对下一个中间件函数的引用,我们把它分配给变量next 。
我们总是在中间件函数的末尾调用next() ,以便将执行传递给下一个处理程序。除非我们想过早地结束响应并将其送回客户端。
你通常使用预制的中间件,以npm 包的形式。在这里可以找到一个大的可用列表。
其中一个例子是cookie-parser ,它被用来解析cookie到req.cookies 对象中。你可以用npm install cookie-parser 来安装它,你就这样使用它。
const express = require('express')
const app = express()
const cookieParser = require('cookie-parser')
app.get('/', (req, res) => res.send('Hello World!'))
app.use(cookieParser())
app.listen(3000, () => console.log('Server ready'))
我们还可以设置一个中间件函数只为特定的路由运行(而不是为所有的路由),方法是把它作为路由定义的第二个参数。
const myMiddleware = (req, res, next) => {
/* ... */
next()
}
app.get('/', myMiddleware, (req, res) => res.send('Hello World!'))
如果你需要存储在中间件中生成的数据,以便将其传递给后续的中间件函数,或传递给请求处理程序,你可以使用Request.locals 对象。它将把这些数据附加到当前的请求中。
req.locals.name = 'Flavio'