首页 文章

如何在loopback中以编程方式更改DataSource

提问于
浏览
1

假设每个用户都有大量数据,无需将这些数据存储在单个表中 . 我想将每个用户的数据存储在单独的数据库中,以便更快地进行查询 .

我希望当任何用户登录环回时,根据存储在用户模型中的用户连接字符串更改数据集 .

我阅读了所有环回文档并尝试了很多练习来做到这一点,但我无法实现这一点 .

我在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();
  });

});

但它没有工作(在代码中标出) .

有什么想法解决这个问题吗?

1 回答

  • 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": {
        "name": "memory",
        "connector": "memory"
      }
    }
    

    请参考这个:app.models()

相关问题