查询在使用mongoose.createConnection()与mongoose.connect()时挂起
作品:
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
与.createConnection
使用.createConnection
,可以通过使用此调用创build的显式连接访问模型。
这意味着,而不是User = db.model(...)
你需要User = db.model(...)
。
例子( 一 , 二 , 三 , 四 )表明这并不复杂,但这种变化是微妙的, 许多人都会错过它 。 这个文档也不是很清楚,这可能是根本原因。
2)你的kraken应用程序和.createConnection
如果您正在构build一个kraken示例,则需要进行一些更改。
- 更改
.createConnection
的代码,以便可以访问返回的对象。 在当前窗体中,您正在使用config
函数返回对象,但不返回.createConnection
生成的连接对象。 - 如果更改在
db.config
configuration/创build连接的方式,请更新index.js
。 你可能可以避免这种情况,但是我怀疑你会在新的调用中重写整个db.js
- 确保使用模型的代码/控制器可以访问
.createConnection
返回的对象。 这意味着访问对象和更改任何你设置variables的地方,所以它使用格式var xyz = db.model('XYZ')
等
对不起,没有一个简单的单行答案…