假设每个用户都有大量数据,无需将这些数据存储在单个表中。我想将每个用户的数据存储在单独的数据库中以便更快地查询。
我希望当任何用户登录环回时,根据用户模型中存储的用户连接字符串更改数据集。
我阅读了所有的环回文档并尝试了很多练习来做到这一点,但我无法实现这一点。
我在server / server.js中尝试这个:
app.use(loopback.context());
app.use(loopback.token());
app.use(function (req, res, next) {
if (!req.accessToken) {
return next();
}
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.'));
}
console.log('server.js');
var loopbackContext = loopback.getCurrentContext();
if (loopbackContext) {
loopbackContext.set('currentUser', user);
}
var DataSource = require('loopback-datasource-juggler').DataSource;
var ds = new DataSource('memory');
app.datasources.db= ds;// <----- IT DOES'NT WORKING
next();
});
});
但是他们正在工作(在代码中标记)。
有什么想法解决这个问题?
答案 0 :(得分:2)
您可以使用 attachTo()功能根据条件附加数据源。
app.use(loopback.context());
app.use(loopback.token());
app.use(function (req, res, next) {
if (!req.accessToken) {
return next();
}
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.'));
}
//console.log('server.js');
var loopbackContext = loopback.getCurrentContext();
if (loopbackContext) {
loopbackContext.set('currentUser', user);
}
// This way you can attach memory datasource to model.
// This only covers models defined using app.model();
var models = app.models();
models.foreach(function(model) {
model.attachTo(app.dataSources.memory);
});
next();
});
});
还在datasource.json中使用已定义的数据源 memory 。
{
"memory": {
"name": "memory",
"connector": "memory"
}
}
请参考:app.models()