Схемы во внешнем модуле не работают в Node.js
У меня огромная головная боль, когда я пытаюсь поделиться некоторыми общими определениями схемы через модуль со всеми другими модулями в моей базе кода.
У меня есть модуль 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),
Я получаю следующую ошибку:
Ошибка типа: неопределенный тип вpaths.mentors
Вы пробовали вкладывать схемы? Вы можете вкладывать только с помощью ссылок или массивов.
Если я использую тот же код в моем локальном модуле, то нет проблем. Если я ссылаюсь на файл схемы непосредственно в require (например, require ('../ node_modules / myproj_schemas / models / ent_schema'), то я получаю ошибку.
Я почти уверен, что раньше это не сломалось, но я отказался от всех изменений и все еще не работает.
Я рисую полный бланк, и любые предложения будут с благодарностью приняты.
РЕДАКТИРОВАТЬ:
Я создал новый модуль Schemas. Есть одна схема:
var mongoose = require('mongoose');
var userSchema = new mongoose.Schema({
email: String
});
module.exports = userSchema;
Это также дает сбой при упаковке в модуль и установке npm в другие модули.
Работает на OS X