使用高速中间件并将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)); };