簡體   English   中英

如何在環回中以編程方式更改DataSource

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM