请帮我摆脱这一切。使用登录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
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
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值时,它应该选择连接数组中的演示字符串。但是它不起作用。我做错了什么??
发布于 2017-04-06 12:02:59
我试图连接mongoDb,因为每个用户登录请求来。我只想在每个api调用上设置一次db,而不是每次调用。如果用户注销,那么db应该是断开的,当再次用户登录时,它应该再次连接。
您需要保存一个数据库连接列表,每个会话一个。一种方法是有一个对象,其中键是会话ID,值是数据库连接。或者,如果希望允许同一用户有多个会话,并且每个用户共享数据库连接,则可以为每个用户ID保留一个连接。现在,当您在用户登录上创建会话时,您还会创建一个新的数据库连接。当您在用户注销时销毁会话时,您必须关闭连接并从存储它的对象中删除它。对于除登录和注销之外的所有其他端点,只需查找并使用连接即可。
这是实现您的目标的方法,但请记住,为每个登录用户保持单独的数据库连接有许多缺点,并且浪费了您的应用程序和数据库中的大量资源。
我们可以通过api调用设置mongo的连接字符串吗?
是的,当然。但这将意味着人们将能够欺骗你的应用程序,例如闯入其他人的数据库,你将对所有的法律后果负责。
https://stackoverflow.com/questions/43254509
复制相似问题