这在javascript类ES6方法中未定义

时间:2019-07-17 08:51:10

标签: class this javascript-objects

在处理http响应的UserController类中,我希望从此类的findAll方法访问从另一个类“ UserService”注入的方法,该方法在我的构造函数中实例化。 但是“ this”是不确定的。 我真的不知道为什么。 我在路由文件中使用new关键字实例化了UserController。

我正在使用express,esm建立一个新的节点应用程序。我用基于ESM的ES6糖编写课程。

userRoutes.js

module.exports = app => {
const userController = new UserController();
  app.get(
    '/api/v1/users',
    AuthentificationMiddleware.verify,
    AuthorizationMiddleware.permit(['admin', 'user']),
    userController.findAll,
  );
}

UserController.js

export default class UserController {
  constructor() {
    this.userService = new UserService();
  }

  async findAll(req, res, next) {
    if (!req.body) next(new Error('No body found'));
    const api = new Api(res, req);
    // here this is undefined console.log(this);
    // Then I can't access to this.userService.findAll()
    try {
      const { users, error } = await this.userService.findAll();
      if (error) return api.failure({ error, status: 422 });
      return api.success({
        users,
      });
    } catch (error) {
      return api.failure({ error, status: 422 });
    }
  }
}

UserService.js

export default class UserService {
  constructor() {
    this.userDbHelper = new UserDBHelpers();
  }

  async findAll() {
    try {
      const users = await this.userDbHelper.findAll();
      return { users };
    } catch (error) {
      throw error;
    }
  }
}

我希望这是课程,但是我没有定义

0 个答案:

没有答案