作品:
var mongoose = require('mongoose');
var db = function() {
return {
config: function(conf) {
mongoose.connect('mongodb://' + conf.host + '/' + conf.database);
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function callback() {
console.log('db connection open');
});
}
};
};
module.exports = db();
不起作用:
var mongoose = require('mongoose');
var db = function() {
return {
config: function(conf) {
var db = mongoose.createConnection('mongodb://' + conf.host + '/' + conf.database);
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function callback() {
console.log('db connection open');
});
}
};
};
module.exports = db();
插入代码:
'use strict';
var mongoose = require('mongoose'),
User = mongoose.model('User'),
p = require('../lib/promise');
...
app.post('/user', function (req, res) {
res.format({
json: function () {
//extract the user from the req
try {
var user = new User();
user.firstName = req.body.firstName;
user.lastName = req.body.lastName;
user.userName = req.body.userName;
user.password = req.body.password;
user.email = req.body.email;
user.save(function(err, data) {
//omitted
...
最佳答案
不幸的是,这不是一个简单的重构。
1) .createConnection
与 .connect
使用.createConnection
时,您可以通过使用此调用创建的显式连接来访问模型。
这意味着您需要 User = db.model(...)
,而不是 User = mongoose.model(...)
。
示例( one 、 two 、 three 、 four )表明这并不复杂,但变化足够微妙,以至于 many people miss it 。文档对此也不是很清楚,这可能是根本原因。
2) 你的 kraken 应用程序和 .createConnection
如果您正在基于 kraken 示例之一进行构建,则需要进行一些更改。
- 更改
.createConnection
周围的代码,以便您可以访问返回的对象。在当前表单中,您将返回一个带有config
函数的对象,但不会返回.createConnection
生成的连接对象。 - 如果您更改
db.config
中配置/创建连接的方式,请更新index.js
。您也许可以避免这种情况,但我怀疑您将围绕新调用重写整个db.js
。 - 确保使用模型的代码/ Controller 可以访问您的
.createConnection
返回的对象。这意味着既可以访问对象,也可以更改设置变量的任何位置,以便它使用var xyz = db.model('XYZ')
等格式。
抱歉,没有简单的一行答案......
关于express - 使用 mongoose.createConnection() 与 mongoose.connect() 时查询挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22786374/