Mongoose:" TypeError:"未定义的类型

时间:2014-08-26 18:22:28

标签: node.js mongodb mongoose

我有一个使用猫鼬的模块。我的主要项目也使用猫鼬。我发现我无法使用模块与项目架构的连接。参见示例:

var mod = require('module_with_mongoose_connection');
var mongoose = require('mongoose');

var SessionSchema = new mongoose.Schema({ // replacing this with `mod.mongoose.Schema` works
...
});
mod.mongooseConnection.model('session', SessionSchema);

以上示例抛出

    throw new TypeError('Undefined type at `' + path +
          ^
TypeError: Undefined type at `paths.name`
  Did you try nesting Schemas? You can only nest using refs or arrays.
    at Function.Schema.interpretAsType (/Users/me/Work/me/nodejs/orm-model/node_modules/mongoose/lib/schema.js:397:11)
    at Schema.path (/Users/me/Work/me/nodejs/orm-model/node_modules/mongoose/lib/schema.js:334:29)
    at Schema.add (/Users/me/Work/me/nodejs/orm-model/node_modules/mongoose/lib/schema.js:245:12)
    at Schema.add (/Users/me/Work/me/nodejs/orm-model/node_modules/mongoose/lib/schema.js:240:14)
    at new Schema (/Users/me/Work/me/nodejs/orm-model/node_modules/mongoose/lib/schema.js:72:10)
Why is that? A bug?

这个问题的解决方案是什么?一个错误?

3 个答案:

答案 0 :(得分:1)

我有同样的错误,我的问题是我的require语句中有拼写错误:

var mongoose = require('Mongoose'); // Don't do this

var mongoose = require('mongoose'); // Use a lowercase 'm' 

答案 1 :(得分:0)

我找到了the solution。事实证明,只有在使用本地模块(例如require('../module_with_mongoose_connection'))时才会抛出错误。在npmnode_modules内)使用模块时,它可以正常工作。当mongoose连接为dynamically patched时,也会引发错误(例如,您添加了mongooseConnection.myattr = 'something'之类的属性。)

这真的很奇怪,但我希望这个答案可以帮助别人。

答案 2 :(得分:0)

所以我遇到了同样的问题,@ xpepermint给出的答案并没有解决我的问题,但确实让我走上了正轨。我有两个主文件夹,每个文件夹都有自己的node_modules(例如C:\ MyDocs \ MyProject \ Server \ node_modules和C:\ MyDocs \ MyProject \ Tests \ node_modules)。在我给出的示例中,“Tests”文件夹下的测试脚本需要“Server”文件夹中的文件。