[英]Express.js on every request event?
我想知道是否存在像下面这样解释的东西?
是否可以使用express.js
制作“中间执行”条件?
我知道这很难解释,但请看下面的代码。
想象一下,我们有简单的 API 使用快递:
const app = require('express')
app.get('/endpoint', (request, response) => {
// code
response.status(200)
})
app.get('/endpoint2', (request, response) => {
// code
response.status(200)
})
好的。 现在我想对每个尝试请求任何端点的用户进行身份验证。 想象一下下面的示例 function:
// pesudo code
// GET /endpoint2 for example
app.onEvent('request', (request, response) => {
// some code
if(something == true){
// go ahead, execute your request
request.execute() // redirect to app.get('/endpoint2', ...
}
else {
// authentication failed
response.status(401).message('Wrong API key or something')
}
})
// pesudo code
我想我解释得很清楚。 谢谢你的帮助。
这称为中间件。
编写一个接受request
、 response
和next
arguments 的 function。
完成后调用next()
(除非您想发送响应(如 Forbidden)代替)。
传给use
。
app.use(yourMiddleware);
您可以像这样编写任何 function 进行验证
function verify(req, res, next) {
const bearerHeader = req.headers["authorization"];
if (typeof bearerHeader !== "undefined") {
console.log("Auth token", bearerHeader);
} else {
res.status(403);
}
next();
}
以上是检查请求中的授权 header 的示例。 你可以写你自己的条件。 如果条件不符合退货。
res.status(403)
并且在每个请求中只需添加这个中间件 function 进行验证
app.get('/endpoint', verify,(request, response) => {
// code
response.status(200)
})
app.get('/endpoint2',verify, (request, response) => {
// code
response.status(200)
})
这将首先检查调用验证方法,它将验证书面条件,如果失败,它将仅返回 403 状态码,如果通过则
next()
function 将获得触发
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.