当我用 ControllerBase.ts 调用api/cateogry/:id
时出错了
在findById
方法中,this._service
为空。但在构造函数中,this._service
不为null。我可以告诉发生了什么,我不知道如何解决它。
请帮帮我!
答案 0 :(得分:0)
在直接调用函数而不是在类对象上执行函数时,有时会忽略Typescript' this
处理。而不是传递
this._controller.findById`
到您的路由器尝试传递
this._controller.findById.bind(this)
答案 1 :(得分:0)
@Paarth感谢小费。我是stackoverflow的新手。我不知道它是如何工作的,但下次我会被注意到。 这是我的代码sameples:
class RepositoryBase<T extends IEnityModel> {
private _model: mongoose.Model<mongoose.Document>;
constructor(schemaModel: mongoose.Model<mongoose.Document>) {
this._model = schemaModel;
}
create(item: T, callback: (error: any, result: any) => void) {
this._model.create(item, callback);
}
retrieve(callback: (error: any, result: any) => void) {
this._model.find({}, callback)
}
update(id: string, item: T, callback: (error: any, result: any) => void) {
this._model.update({ _id: this.toObjectId(id) }, item, callback);
}
remove(id: string, callback: (error: any, result: any) => void) {
this._model.remove({ _id: this.toObjectId(id) }, (err) => callback(err, null));
}
findById(id: string, callback: (error: any, result: T) => void) {
this._model.findById(id, callback);
}
private toObjectId(id: string): mongoose.Types.ObjectId {
return new mongoose.Types.ObjectId(id)
}
}
你可以看到_model是私有的,而且CategoryRepository类扩展了RepositoryBase,不知何故我想要在CategoryRepository中访问_model,所以我将private更改为protected,但是它会导致如下错误: typescript protected error info
对我来说这很奇怪。