ES6类,传递函数作为参数来注册expressjs路由

Wan*_*lli 6 javascript ecmascript-6

该类用于扩展expressjs应用程序中的所有控制器:

import response from '../utils/responseParser.js';

const APISLUG = '/api/v1/';

export default class BaseController {

  constructor(name, app, model){
    this.model = model;
    this.app = app;
    this.name = name;
    console.log(model);
    this.register();
  }

  register() {
    this.app.get(APISLUG + this.name, this.all);
  }
  /*
  Retrive all records
  */
  all(req, res, next) {
    this.model.all(req.body, (err, data) => {
      if(err) return res.json(response.replyError(data));
      return res.json(response.reply(data));
    });
  }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我已经制作了一个"注册"方法来自动设置所有基本路线.

我unable to read property " model " of undefined "在这一行收到错误:

this.app.get(APISLUG + this.name, this.all);
Run Code Online (Sandbox Code Playgroud)

我相信这是因为当我将函数作为参数传递时范围会丢失.我怎么解决这个问题?

Amm*_*san 13

使用bind方法绑定范围,如下所示

this.app.get(APISLUG + this.name, this.all.bind(this));
Run Code Online (Sandbox Code Playgroud)