Los esquemas en el módulo externo no funcionan en Node.js
Tengo un dolor de cabeza masivo al tratar de compartir algunas definiciones de esquemas comunes a través de un módulo con todos los demás módulos en mi base de código.
Tengo un módulo myproj_schemas que contiene estos dos esquemas:
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;
Y
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;
Los mentores también se definen en otro archivo.
Mi unidad prueba para estos dos trabajos en el módulo de esquemas.
Cuando npm instalo este módulo e intento crear usando
Entrepreneur = db.model('Entrepreneur', entrepreneurSchema),
Obtuve el siguiente error:
TypeError: tipo indefinido enpaths.mentors
¿Intentaste anidar esquemas? Solo puedes anidar usando referencias o matrices.
Si uso el mismo código en mi módulo local, entonces no hay problema. Si hago referencia al archivo de esquema directamente en require (por ejemplo, require ('../ node_modules / myproj_schemas / models / ent_schema'), aparece el error.
Estoy bastante seguro de que no se estaba rompiendo así antes, pero he retirado todos los cambios y todavía no funciona.
Estoy dibujando un espacio en blanco completo, y cualquier sugerencia sería recibida con gratitud.
EDITAR:
He creado un nuevo módulo de esquemas. Tiene un esquema:
var mongoose = require('mongoose');
var userSchema = new mongoose.Schema({
email: String
});
module.exports = userSchema;
Esto también falla cuando se empaqueta en un módulo y se instala npm en otros módulos.
Ejecutando en OS X