首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当用户登录nodejs mongodb时,我想动态地连接db

当用户登录nodejs mongodb时,我想动态地连接db
EN

Stack Overflow用户
提问于 2017-04-06 11:55:12
回答 1查看 939关注 0票数 0

请帮我摆脱这一切。使用登录api,我想要设置mongoose连接字符串。是否有可能使用登录api设置连接字符串,并且它也适用于其他api (在登录api之后调用该api)?就像第一次用户登录一样,我将db设置为db,而对于进一步的api调用,是否可以为该db工作?我曾经尝试过How to connect multiple mongodb database dynamically using mongoose?,但是在每个api中,他们都指定了请求的param。我们可以通过api调用来设置mongo的连接字符串吗?

这是我的app.js

代码语言:javascript
复制
 var mongoose = require('mongoose');
    var connections = [test = mongoose.createConnection('mongodb://localhost:27017/test'), 
demo = mongoose.createConnection('mongodb://localhost:27017/demo')];

    exports.getDatabaseConnection = function (dbName) {

      if (connections[dbName]) {
        //database connection already exist. Return connection object
        return connections['dbName'];
      } else {
        connections[dbName] = mongoose.createConnection('mongodb://localhost:27017/' + dbName);
        return connections['dbName'];
      }
    }

这是我的user.js

代码语言:javascript
复制
exports.authenticate = function (req, res) {
 var db = app.getDatabaseConnection(req.body.keydb);
 var userDetail = db.model('userdetail', UserSchema); 

  userDetail.findOne({
    email: req.body.email,
    userType: req.body.userType
  }, function (err, user) {
    if (err) throw err;
    if (!user) {
      res.send({ status: 400, message: req.i18n.__("user.authIncorrectEmail") });
    } else {...}
});
}

当我以demo..then的形式请求keydb值时,它应该选择连接数组中的演示字符串。但是它不起作用。我做错了什么??

EN

回答 1

Stack Overflow用户

发布于 2017-04-06 12:02:59

我试图连接mongoDb,因为每个用户登录请求来。我只想在每个api调用上设置一次db,而不是每次调用。如果用户注销,那么db应该是断开的,当再次用户登录时,它应该再次连接。

您需要保存一个数据库连接列表,每个会话一个。一种方法是有一个对象,其中键是会话ID,值是数据库连接。或者,如果希望允许同一用户有多个会话,并且每个用户共享数据库连接,则可以为每个用户ID保留一个连接。现在,当您在用户登录上创建会话时,您还会创建一个新的数据库连接。当您在用户注销时销毁会话时,您必须关闭连接并从存储它的对象中删除它。对于除登录和注销之外的所有其他端点,只需查找并使用连接即可。

这是实现您的目标的方法,但请记住,为每个登录用户保持单独的数据库连接有许多缺点,并且浪费了您的应用程序和数据库中的大量资源。

我们可以通过api调用设置mongo的连接字符串吗?

是的,当然。但这将意味着人们将能够欺骗你的应用程序,例如闯入其他人的数据库,你将对所有的法律后果负责。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43254509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档