Я сослался на mon goose sample , чтобы создать приложение express с mon goose.
NOTE Нашел строки, которые вызывают эту проблему ( ближе к концу), но все же нужна помощь, чтобы разобраться в проблеме.
Вставка соответствующего раздела для краткости. Я поместил console.log в constructor
и findById
. Модель правильно выводится во время привязки, но из findById она выводится как анонимная функция, из-за которой получение ** this.Model.findById не является функцией ** 'ошибка.
@injectable()
export class GenericRepository<Entity, TModel extends Document> implements Repository<Entity> {
protected Model: Model<TModel>;
constructor(@inject(TYPES.DbClient) dbClient: mongoose.Mongoose,
@unmanaged() name: string, @unmanaged() schemaDefinition: SchemaDefinition) {
const schema = new Schema(schemaDefinition, { collection: name});
this.Model = dbClient.model<TModel>(name, schema);
console.log(this.Model);
}
async findById(id: string): Promise<Entity> {
console.log(this.Model);
return new Promise((resolve, reject) => {
скриншот из отладчика снимок экрана при вызове findById. Как видно, this.Model
является «анонимным». Нужна помощь в понимании этого поведения.
Обертка модели mon goose перепуталась после этих строк. Пытался получить ссылку на репо, это model
это анонимно Комментирование работает.
const tracer = new InversifyTracer({filters: ["*:*", "!Mongo*", "!EventEmitter"],});
tracer.on('call', (callInfo: CallInfo) => {
console.log(`${callInfo.className} ${callInfo.methodName} `);
});
tracer.on('return', (returnInfo: ReturnInfo) => {
console.log(`${returnInfo.className} ${returnInfo.methodName} returned ${returnInfo.result} - ${returnInfo.executionTime}ms`);
});
tracer.apply(container);