开发中间件
中间件函数是可以访问请求对象 (req
)、响应对象(res
) 和 next
应用程序的请求-响应周期中的函数的函数。该next函数是 Express 路由器中的一个函数,当被调用时,它会执行当前中间件的后续中间件。
示例
中间件函数 myLogger
以下是名为 “myLogger” 的中间件函数的简单示例。当应用程序的请求通过此函数时,它只会打印“LOGGED”。中间件函数被分配给名为的变量 myLogger。
js
const myLogger = (req, res, next) => {
console.log('LOGGED');
next();
};
注意上面对 的调用 next()。调用此函数会调用应用中的下一个中间件函数。该next()函数不是 Node.js 或 Express API 的一部分,而是传递给中间件函数的第三个参数。该next()函数可以命名为任何名称,但按照惯例,它始终命名为“next”。为避免混淆,请始终使用此惯例。
要加载中间件函数,请调用 app.use()
并指定中间件函数。例如,以下代码myLogger在路由到根路径 (/) 之前加载中间件函数。
js
var express = require('express')
var app = express()
var myLogger = function (req, res, next) {
console.log('LOGGED')
next()
}
app.use(myLogger)
app.get('/', function (req, res) {
res.send('Hello World!')
})
app.listen(3000)
中间件函数validateCookies
创建一个中间件函数来验证传入的 cookie,如果 cookie 无效则发送 400 响应。
这是一个使用外部异步服务验证 cookie 的示例函数
js
async function cookieValidator (cookies) {
try {
await externallyValidateCookie(cookies.testCookie)
} catch {
throw new Error('Invalid cookies')
}
}
使用 cookie-parser
中间件解析对象传入的 cookie, validateCookies
中间件返回一个 Promise
,一旦被拒绝,将自动触发我们的错误处理程序。
js
var express = require('express')
var cookieParser = require('cookie-parser')
var cookieValidator = require('./cookieValidator')
var app = express()
async function validateCookies (req, res, next) {
await cookieValidator(req.cookies)
next()
}
app.use(cookieParser())
app.use(validateCookies)
// error handler
app.use(function (err, req, res, next) {
res.status(400).send(err.message)
})
app.listen(3000)
可配置的中间件
如果您需要中间件可配置,请导出一个接受选项对象或其他参数的函数,然后根据输入参数返回中间件实现。
my-middleware.js
js
module.exports = (options) => {
return (req, res, next) => {
// do something
next()
}
}
按如下所示使用中间件:
js
var mw = require('./my-middleware.js')
app.use(mw({ option1: '1', option2: '2' }))