为什么猫鼬连接在单独的模块中时会挂起



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

出于某种原因,当我将mongoose.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);
});

脚本.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

工作版本

脚本.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 个文件。

我在这里错过了什么??

想通了 - /server/ 文件夹有自己的node_modules文件夹,所以connect.js中的require("mongoose")实际上包含了一个与脚本不同的猫鼬实例。仔细阅读节点模块文档帮助我弄清楚了这一切。

您是否尝试过从"./connect"模块导出某些内容?否则,节点将没有任何要保留的内容,并且连接将被垃圾回收。

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

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

最新更新