Express 使用mongoose.createConnection()与mongoose.connect()时,查询挂起

Express 使用mongoose.createConnection()与mongoose.connect()时,查询挂起,express,mongoose,kraken.js,Express,Mongoose,Kraken.js,作品: 不起作用: 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.erro

作品:

不起作用:

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();

不幸的是,这不是一个简单的重构

1)
.createConnection
vs
.connect

当使用
.createConnection
时,您可以通过使用此调用创建的显式连接访问模型

这意味着,您需要的不是
User=mongoose.model(…)
,而是
User=db.model(…)

示例(,)表明,这并不复杂,但变化非常微妙。文档对此也不是非常清楚,这可能是根本原因

2)你的kraken应用程序&
.createConnection

如果你是建立在一个海怪的例子上,你需要做一些改变

  • 更改
    .createConnection
    周围的代码,以便访问返回的对象。在当前表单中,您使用
    config
    函数返回一个对象,但不返回
    .createConnection
    生成的连接对象
  • 如果在
    db.config
    中更改配置/创建连接的方式,请更新
    index.js
    。您可能可以避免这种情况,但我怀疑您会围绕新调用重写整个
    db.js
  • 确保使用模型的代码/控制器可以访问
    .createConnection
    返回的对象。这意味着既可以访问对象,也可以更改设置变量的任何位置,使其使用格式
    var xyz=db.model('xyz')
    ,等等

  • 很抱歉没有简单的一句话回答…

    非常感谢,这句话让我发疯了。我同意文档导致了很多问题。这就是为什么MongoDB和Mongoose的名声不好。确实有很多关于这个问题的问题!我刚刚在github上提交了一个问题,因为这会造成太多的挫折
    '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
    ...