Session 将会话存储在操作挂钩-环回中

Session 将会话存储在操作挂钩-环回中,session,loopbackjs,express-session,connect-mongo,Session,Loopbackjs,Express Session,Connect Mongo,我想存储除userId或accessToken以外的一些数据,以便使用express session在环回应用程序中的保存后或保存前操作挂钩中存储在会话中 我在我的服务器/server.js中有这个: .... const session = require('express-session'); const MongoStore = require('connect-mongo')(session); .... app.use(session({ name:'session-name

我想存储除
userId
accessToken
以外的一些数据,以便使用
express session
在环回应用程序中的
保存后
保存前
操作挂钩中存储在会话中

我在我的
服务器/server.js中有这个:

....
const session = require('express-session');
const MongoStore = require('connect-mongo')(session);
....

app.use(session({
    name:'session-name',
    secret: 'keyboard cat',
    store: new MongoStore({url: 'mongodb://localhost/test', ttl:1}),
    resave: false,
    saveUninitialized: true
}));
当我用一些参数定义远程方法时,它实际上传递的是参数,而不是
req
对象,所以我不能用快速的方式来实现

如何使用会话存储和获取价值

编辑: 我找到了一种在远程方法中设置会话的方法,将其添加到我的model.json的远程方法中:

"accepts": [
    {
        "arg": "req",
        "type": "object",
        "http": {
            "source": "req"
        }
    }
]
并且,将
req
参数添加到远程方法函数中

Model.remoteMethod = function (req, callback) {
    req.session.data = { 'foo': 'bar' }
    callback(null)
};
现在,问题是我想在操作hook中获得这个会话值

Model.observe('before save', function (ctx, next) {
    //How to get the session here?
})
尝试:

您可以设置ctx值:

var LoopBackContext = require('loopback-context');

    MyModel.myMethod = function(cb) {
      var ctx = LoopBackContext.getCurrentContext();
      // Get the current access token
      var accessToken = ctx && ctx.get('accessToken');
      ctx.set('xx', { x: 'xxxx' } );

    }
 module.exports = function(MyModel) {
      MyModel.observe('access', function(ctx, next) {
        const token = ctx.options && ctx.options.accessToken;
        const userId = token && token.userId;
        const modelName = ctx.Model.modelName;
        const scope = ctx.where ? JSON.stringify(ctx.where) : '<all records>';
        console.log('%s: %s accessed %s:%s', new Date(), user, modelName, scope);
        next();
      });
    };
获取ctx值:

var LoopBackContext = require('loopback-context');

    MyModel.myMethod = function(cb) {
      var ctx = LoopBackContext.getCurrentContext();
      // Get the current access token
      var accessToken = ctx && ctx.get('accessToken');
      ctx.set('xx', { x: 'xxxx' } );

    }
 module.exports = function(MyModel) {
      MyModel.observe('access', function(ctx, next) {
        const token = ctx.options && ctx.options.accessToken;
        const userId = token && token.userId;
        const modelName = ctx.Model.modelName;
        const scope = ctx.where ? JSON.stringify(ctx.where) : '<all records>';
        console.log('%s: %s accessed %s:%s', new Date(), user, modelName, scope);
        next();
      });
    };
module.exports=函数(MyModel){
MyModel.observe('access',函数(ctx,下一步){
const token=ctx.options&&ctx.options.accessToken;
const userId=token&&token.userId;
const modelName=ctx.Model.modelName;
const scope=ctx.where?JSON.stringify(ctx.where):“”;
console.log(“%s:%s”访问了%s:%s',新日期(),用户,模型名,作用域);
next();
});
};

loopback
上下文存储
userId
accesTokan
。在整个web中,您可以使用
ctx
访问,其工作方式类似于
环回中的
会话

您得到的错误和响应。请解释我不知道如何在会话中存储数据(除了访问令牌或用户id),这有点像黑客,但我会使用远程钩子将整个上下文对象()附加到所讨论的实例,并在保存之前在
钩子中将其删除。问题在于,模型挂钩不一定与单个请求关联。这是他们在LoopBack 4中已经或正在尝试解决的问题。嘿,我尝试了这个,但是在ctx对象中没有定义存储的对象。你能安装LoopBack上下文模型吗?是的,我和cls hookedcan一起安装了它。你可以添加服务器/中间件。json这个代码{“initial”:{“LoopBack context”#每个请求:{“params”:{“enableHttpContext”:true}}}}}您的环回版本是什么。。?