Инверсия js инъекции модели mon goose, выводимой как анонимная функция во время выполнения - PullRequest
0 голосов
/ 06 августа 2020

Я сослался на 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);

...