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

时间:2017-08-29 14:00:26

标签: javascript node.js express

我正在尝试设置一个安全检查中间件,它将在我添加它的路由上运行。

中间件

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

2 个答案:

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