我对Node.js有一个奇怪的问题,其中node_module目录似乎互相干扰。我有以下文件结构:
- node_modules
- User.js
- app
- app.js
- node_modules
所以我在顶级目录中有一个node_modules,在app目录中有一个。每个node_modules目录只包含一个mongoose目录。 User.js文件是一个简单的猫鼬模型:
exports.User = function() {
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var UserSchema = new Schema({
email: { type: String },
firstName: { type: String },
lastName: { type: String },
});
mongoose.model("User", UserSchema);
var User = mongoose.model("User");
return User;
}();
主应用程序app.js看起来像这样:
var mongoose = require("mongoose");
mongoose.connect("mongodb://localhost:27017/crnapi");
require("../User").User.find(function(err, users) {
if(err)
console.log(err);
console.log("here");
});
除了连接到mongo并找到用户之外什么都没有。我看到的问题是对find()的调用只是挂起 - 从不调用回调。
但是,如果我删除内部node_modules目录(app文件夹中的那个),它可以正常工作。这就像内部node_modules的存在以某种方式搞砸了猫鼬的工作。我知道我可以将所有内容放在外部node_modules中,只删除内部的那个,但我有理由不这样做。
谁能告诉我这里发生了什么?是否有调试模式,我可以运行节点或mongoose,这将告诉我它挂起了什么?
答案 0 :(得分:1)
问题在于我创建了多个mongoose实例而不是创建一个实例并让所有代码都使用它。我通过将mongoose模块移动到一个足够高的目录来解决这个问题,所有使用mongoose的代码都可以访问同一个目录。