在操作钩子中存储会话 - Loopback
Store session in operation hook - Loopback
我想存储 userId
或 accessToken
以外的一些数据以存储在会话中,在 after save
或 before save
环回应用程序中的操作挂钩中使用 express-session
。
我的 server/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)
};
现在,问题是我想在操作钩子中获取这个会话值
Model.observe('before save', function (ctx, next) {
//How to get the session here?
})
试试 this now :
可以设置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' } );
}
获取ctx值:
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();
});
};
loopback
上下文存储 userId
和 accesTokan
。在整个网络中,您可以使用 ctx
进行访问,它的工作方式类似于 session
in loopback
.
我想存储 userId
或 accessToken
以外的一些数据以存储在会话中,在 after save
或 before save
环回应用程序中的操作挂钩中使用 express-session
。
我的 server/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)
};
现在,问题是我想在操作钩子中获取这个会话值
Model.observe('before save', function (ctx, next) {
//How to get the session here?
})
试试 this now :
可以设置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' } );
}
获取ctx值:
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();
});
};
loopback
上下文存储 userId
和 accesTokan
。在整个网络中,您可以使用 ctx
进行访问,它的工作方式类似于 session
in loopback
.