많은 공통적 인 스키마 정의를 모듈을 통해 내 코드 기반의 다른 모든 모듈에 공유하려고합니다.Node.js에서 외부 모듈의 스키마가 작동하지 않습니다.
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;
멘토
도 다른 파일에 정의되어나는이 두 가지 스키마를 포함하는 myproj_schemas 모듈을 가지고있다.
이 두 가지에 대한 단위 테스트는 스키마 모듈에서 작동합니다.
나는이 모듈을 설치하고 난 다음 오류 얻을
Entrepreneur = db.model('Entrepreneur', entrepreneurSchema),
사용하여 만들려고 NPM :
형식 오류 : 정의되지 않은 유형 paths.mentors
에서 당신이 스키마를 중첩하려고 했습니까? 심판이나 배열 만 사용하여 중첩 할 수 있습니다.
내 로컬 모듈에서 동일한 코드를 사용하면 문제가 없습니다. require (예 : require ('../ node_modules/myproj_schemas/models/ent_schema')에서 스키마 파일을 직접 참조하는 경우 오류가 발생합니다.)
나는 이것이 이렇게 부서지지 않았 음을 확신합니다. 이전,하지만 난 모든 변경 사항을 백업 한 그것은 여전히 작동하지 않습니다 내가 완전한 빈 그리기있어
을하고, 어떤 제안은 기꺼이받을 것
편집 :.. 나는 '
새로운 스키마 모듈을 만들었습니다. 하나의 스키마가 있습니다 :
var mongoose = require('mongoose');
var userSchema = new mongoose.Schema({
email: String
});
module.exports = userSchema;
모듈에 패키지되어 다른 모듈에 설치되면 실패합니다.
OS에서 실행되는 X 당신이 개인적으로 내가 가진 모든 모델을 등록하는 init 메소드와 별도의 "일반적인"프로젝트를 만들어이 https://github.com/Keeguon/mongoose-behaviors/blob/master/lib/timestampable.js
감사합니다. 이 문제를 겪고 있기 때문에 모듈 사이에서 스키마를 공유 할 필요가없는 이러한 유형의 솔루션으로 이동했습니다.나는 왜 문제가 발생했는지에 대해 명확한 생각을 가지고 있다고 느끼지 않지만, 환경이라고 생각하기 시작했으며, 아마도 일부 캐시 지우기가 도움이되었을 것입니다. – JonRed
저는이 대답을 받아 들일 것입니다. 실제로 제 질문에 직접 대답하기 때문에가 아니라, 정상에 올려서 커뮤니티에 가장 도움이 될 것이라고 생각하기 때문입니다. 다시 한 번, 당신의 노력에 감사드립니다. – JonRed
나는 이것을 제대로 작동시키지 못했고,'proxyquire'를 사용하여 내 스키마 정의 모듈에 사용 된 Mongoose 인스턴스를 덮어 써야했습니다. 작동하지만 매우 더러운 것 같습니다. – Mikke