[英]How to change DataSource programmatically in loopback
假設每個用戶都有大量數據,不需要將它們存儲在單個表中。 我想將每個用戶的數據存儲在單獨的數據庫中,以便更快地進行查詢。
我想當任何用戶登錄回送時,根據存儲在User模型中的用戶連接字符串更改數據集。
我閱讀了所有回送文檔,並嘗試了許多實踐來做到這一點,但我無法實現。
我在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();
});
});
但它不起作用(代碼中標記)。
有解決這個問題的主意嗎?
您可以使用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": {
"name": "memory",
"connector": "memory"
}
}
請也參考此: app.models()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.