使用高速中间件并将res.local数据传递给路由

我试图build立一个安全检查中间件,将运行在我添加到的路线上。

中间件

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返回一个空对象

在你运行你的安全检查之前,请打电话给你。

IOW:在安全检查完成处理之前,下一个中间件正在被处理。 安全检查是asynchronous的。

把你的下一个放在你的内部,等待安全检查完成。

例如。

 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(); }); }; 

您需要将安全检查承诺与callback联系起来。

 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)); };