Node.js node_modules相互干扰

时间:2013-05-31 17:23:47

标签: node.js mongodb mongoose

我对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,这将告诉我它挂起了什么?

1 个答案:

答案 0 :(得分:1)

问题在于我创建了多个mongoose实例而不是创建一个实例并让所有代码都使用它。我通过将mongoose模块移动到一个足够高的目录来解决这个问题,所有使用mongoose的代码都可以访问同一个目录。