为什么mongoose连接在单独的模块中会挂起?

时间:2017-02-04 18:53:11

标签: node.js mongodb mongoose

我有一个相对简单的Node脚本应该打开mongodb连接(使用mongoose),并返回测试集合中的所有记录。

出于某种原因,当我将mongoose.connect调用分成一个单独的模块(因为它将被多个脚本使用)时,脚本不起作用。但是,当我在同一个文件中进行connect调用时,它确实有效。

破碎版

connect.js

var mongoose = require("mongoose");
var config = require("./_config");  // holds different mongo URIs for dev/prod

var mongoUrl = config.mongoURI[process.env.NODE_ENV];

mongoose.connect("mongodb://localhost/test");
var db = mongoose.connection;
db.on("connected", function () {
  console.log("Mongoose default connection open to " + mongoUrl);
});

的script.js

var mongoose = require("mongoose");
var Schema = mongoose.Schema;
require("../server/connect");

var testSchema = new Schema({
  teststring: String
}, {
  timestamps: true
}, { bufferCommands: false });

var Tester = mongoose.model("Tester", testSchema);
Tester.find(function (err, result) {
  console.log(result);
});
// node script.js
// Outputs "Mongoose default connection open to mongodb://localhost/test"
// then hangs

工作版

的script.js

var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var config = require("./_config");

var mongoUrl = config.mongoURI[process.env.NODE_ENV];

mongoose.connect(mongoUrl);
var db = mongoose.connection;
db.on("connected", function () {
  console.log("Mongoose default connection open to " + mongoUrl);
});

var testSchema = new Schema({
  teststring: String
}, {
  timestamps: true
}, { bufferCommands: false });

var Tester = mongoose.model("Tester", testSchema);
Tester.find(function (err, result) {
  console.log(result);
});

这个单文件版本可以正常运行并返回结果。正如您所看到的,唯一的区别似乎是使用1个文件而不是2个文件。

我在这里缺少什么?

2 个答案:

答案 0 :(得分:0)

您是否尝试过从' ./ connect'中导出内容?模块?否则,节点将无法保留任何内容,并且连接将被垃圾收集。

将此添加为最后一行: module.exports = db

然后在导入时将其分配给变量 var mongoDb = require('./connect')

答案 1 :(得分:0)

想出来 - /server/文件夹有自己的node_modules文件夹,因此require("mongoose")中的connect.js实际上包含了一个与脚本不同的mongoose实例。仔细阅读the node module docs帮我弄明白了。