我正在尝试设置一个安全检查中间件,它将在我添加它的路由上运行。
中间件
function SecurityCheckHelper(req, res, next){
apiKey = req.query.apiKey;
security.securityCheck(apiKey).then(function(result) {
res.locals.Security = result.securitycheck;
console.log(res.locals.Security);
});
return next(); // go to routes
};
路线
app.get('/settings', SecurityCheckHelper,function(req, res, next) {
console.log(res.locals);
});
我相对直截了当地试图将result.securitycheck
(返回true / false)传递到/settings
路线。但是res.locals
正在返回一个空对象
答案 0 :(得分:1)
在您运行securityCheck之前,您的呼叫是下一个。
IOW:在securityCheck完成处理之前,下一个中间件正在处理中。 securityCheck是异步的。
将你的下一个放入你的那个,将等到securityCheck完成。
例如
function SecurityCheckHelper(req, res, next){
apiKey = req.query.apiKey;
security.securityCheck(apiKey).then(function(result) {
res.locals.Security = result.securitycheck;
console.log(res.locals.Security);
next();
});
};
答案 1 :(得分:1)
您需要将安全检查承诺与回调接口。
function SecurityCheckHelper(req, res, next){
apiKey = req.query.apiKey;
security.securityCheck(apiKey)
.then(function(result) {
res.locals.Security = result.securitycheck;
console.log(res.locals.Security);
return next();
})
.catch(err => next(err));
};