【发布时间】:2014-11-20 23:09:50
【问题描述】:
尝试通过一个模块将一些通用架构定义共享给我的代码库中的所有其他模块时,我感到非常头疼。
我有一个包含这两个模式的 myproj_schemas 模块:
var mongoose = require('mongoose'),
util = require("util"),
Schema = mongoose.Schema;
var BaseProfileSchema = function() {
Schema.apply(this, arguments);
this.add({
_user: {type: Schema.Types.ObjectId, ref: 'User', required: true},
name: {type: String, required: true},
bio: {type: String, required: true},
pictureLink: String
});
};
util.inherits(BaseProfileSchema, Schema);
module.exports = BaseProfileSchema;
和
var mongoose = require('mongoose'),
BaseProfileSchema = require('./base_profile_schema.js'),
Schema = mongoose.Schema;
var entSchemaAdditions = {
mentors: {type: Schema.Types.ObjectId, ref: 'Mentor'}
};
var entrepreneurSchema = new BaseProfileSchema(entSchemaAdditions);
module.exports = entrepreneurSchema;
导师也在另一个文件中定义。
我对这两者的单元测试都在模式模块中工作。
当我 npm 安装此模块并尝试使用创建时
Entrepreneur = db.model('Entrepreneur', entrepreneurSchema),
我收到以下错误:
TypeError:paths.mentors 处的未定义类型
您是否尝试过嵌套模式?您只能使用 refs 或数组进行嵌套。
如果我在本地模块中使用相同的代码,那么没问题。 如果我直接在 require 中引用架构文件(例如 require('../node_modules/myproj_schemas/models/ent_schema') ,则会收到错误消息。
我很确定它之前没有像这样中断,但我已经取消了所有更改,但它仍然无法正常工作。
我正在画一个完整的空白,任何建议都将不胜感激。
编辑:
我创建了一个新的架构模块。它有一个架构:
var mongoose = require('mongoose');
var userSchema = new mongoose.Schema({
email: String
});
module.exports = userSchema;
当打包在一个模块中并且 npm install'd 到其他模块时,这也会失败。
在 OS X 上运行
【问题讨论】: