查询在使用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.configconfiguration/创build连接的方式,请更新index.js。 你可能可以避免这种情况,但是我怀疑你会在新的调用中重写整个db.js
-  确保使用模型的代码/控制器可以访问.createConnection返回的对象。 这意味着访问对象和更改任何你设置variables的地方,所以它使用格式var xyz = db.model('XYZ')等
对不起,没有一个简单的单行答案…