Strongloop:currentContext在中间件中不可用?

pfust75

我在Middleware.json中以以下方式在Strongloop中配置了我的中间件:

{ 
"initial:before": {
      "loopback#favicon": {}
  },
  "initial": {
    "compression": {},
    "cors": {
      "params": {
        "origin": true,
        "credentials": true,
        "maxAge": 86400
      }
    },
    "helmet#xssFilter": {},
    "helmet#frameguard": {
      "params": [
        "deny"
      ]
    },
    "helmet#hsts": {
      "params": {
        "maxAge": 0,
        "includeSubdomains": true
      }
    },
    "helmet#hidePoweredBy": {},
    "helmet#ieNoOpen": {},
    "helmet#noSniff": {},
    "helmet#noCache": {
      "enabled": false
    },
    "express-jwt": {
      "paths": [
        "${restApiRoot}"
      ],
      "params": {
        "secret": "secret"
      }
    }
  },
  "session": {},
  "auth": {
    "./middleware/token-validation": {
      "paths": [
        "${restApiRoot}"
      ]
    }
  },
  "parse": {},
  "routes": {
    "loopback#rest": {
      "paths": [
        "${restApiRoot}"
      ]
    }
  },
  "files": {},
  "final": {
    "loopback#urlNotFound": {}
  },
  "final:after": {
    "loopback#errorHandler": {}
  }
}

该文件由Strongloop生成,但手动添加了“ auth”中间件。在此中间件(token-validation.js)中,我想像这样访问currentContext:

return function tokenValidation(req, res, next) {
  var app = req.app;
  var ctx = app.loopback.getCurrentContext();
  console.log(ctx);
});

但是,ctx对象始终为null。...有什么想法吗?

Riaz饰演Kather

步骤1:在config.json中,您需要启用enableHttpContext

 "remoting": {
    "context": {
      "enableHttpContext": true
    }

步骤2:在app.start()之前的sever.js中添加以下代码;

app.use(loopback.token()); // this calls getCurrentContext
app.use(loopback.context()); // the context is started here

app.use(function (req, res, next) {
  if (!req.accessToken) return next();

// your user model.js
  app.models.user.findById(req.accessToken.userId, function(err, user) {
    if (err)   return next(err);
    if (!user) return next(new Error('No user with this access token was found.'));
    res.locals.currentUser = user;

    var loopbackContext = loopback.getCurrentContext();
    console.log('SERVER CTX?' +loopbackContext);
    if (loopbackContext) loopbackContext.set('currentUser', user);
    next();
  });
});

步骤3:将此代码添加到model.js或任何js中。

var loopback = require('loopback');

var ctx = loopback.getCurrentContext();
var currentUser = ctx && ctx.get('currentUser');
console.log('currentUser.username: ', currentUser);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章