我有一个相对简单的 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')