我有一个相对简单的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个文件。
我在这里缺少什么?
答案 0 :(得分:0)
您是否尝试过从' ./ connect'中导出内容?模块?否则,节点将无法保留任何内容,并且连接将被垃圾收集。
将此添加为最后一行:
module.exports = db
然后在导入时将其分配给变量
var mongoDb = require('./connect')
答案 1 :(得分:0)
想出来 - /server/
文件夹有自己的node_modules
文件夹,因此require("mongoose")
中的connect.js
实际上包含了一个与脚本不同的mongoose实例。仔细阅读the node module docs帮我弄明白了。