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

vc6uscn9  于 2023-01-31  发布在  Go
关注(0)|答案(2)|浏览(165)

作品:

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
...
9q78igpj

9q78igpj1#

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

1).createConnection.connect

当使用.createConnection时,您可以通过使用此调用创建的显式连接访问模型。
这意味着您需要的不是User = mongoose.model(...),而是User = db.model(...)
例子(onetwothreefour)表明这并不复杂,但变化很微妙,很多人忽略了它。文档对此也不是很清楚,这可能是根本原因。

2)您的海妖应用程序& .createConnection

如果你是在一个kraken例子的基础上构建的,你需要做一些修改。
1.修改.createConnection周围的代码,以便访问返回的对象。在当前表单中,您使用config函数返回对象,但不返回.createConnection生成的连接对象。
1.如果你改变了在db.config中配置/创建连接的方式,请更新index.js。你也许可以避免这种情况,但是我怀疑你会围绕新的调用重写整个db.js
1.确保处理模型的代码/控制器可以访问.createConnection返回的对象。这意味着既可以访问对象,又可以更改设置变量的任何位置,使其使用var xyz = db.model('XYZ'),等等。
很抱歉,没有一句简单的回答......

ecr0jaav

ecr0jaav2#

您需要使用.createConnection,而不是.connect
不良:

const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/myapp', {useNewUrlParser: true});
var MyModel = mongoose.model('Test', new Schema({ name: String }));
// Works
MyModel.findOne(function(error, result) { /* ... */ });

良好:

const mongoose = require('mongoose');
var connection = mongoose.createConnection('mongodb://localhost:27017/myapp',
                                           {useNewUrlParser: true});
var MyModel = connection.model('Test', new Schema({ name: String }));
// Works
MyModel.findOne(function(error, result) { /* ... */ });

原帖:https://dev.to/maixuanhan/stop-using-the-mongoose-s-default-connection-4nnj
我的频道上有一个视频介绍如何做到这一点:https://youtu.be/mvot9o0BgU8

相关问题