TypeError: Ok не является конструктором - PullRequest
2 голосов
/ 07 августа 2020

у меня есть файл js в этом файле, у меня несколько классов:

class ApiResponse {
  constructor(statusCode, success, message, data) {
 
  }

  Send(res) {
    res.status(statusCode).json({
      message: this.message,
      data: this.data,
      statusCode: this.statusCode,
      success: this.success,
    });
  }
};

module.exports = class BadRerquest extends ApiResponse {
  constructor(message = "عملیات نا موفق") {
    super(ResponseStatus.BAD_REQUEST, false, message, null);
  }
};

module.exports = class Ok extends ApiResponse {
  constructor(message = "عملیات با موفقیت انجام شد") {
    super(ResponseStatus.SUCCESS, true, message, null);
  }
};

и у меня BaseController я использую Ok класс:

 const {
  OkObjectResultPager,
  BadRerquest,
  OkObjectResult,
  Ok,
} = require("./../../core/api/ApiRespose");

Ok(res) {
   return new Ok().Send(res);
}

и у меня RoleController, этот контроллер наследует BaseController, и мне нужно использовать Ok():

 module.exports = new (class RoleController extends BaseController {
  /***
   * Create Role
   */
  async CreateRole(req, res, next) {
      const role = new Role({
        name: req.body.name,
      });
      role.save();
      return this.Ok(res);
  }
  
})();

, но когда я создаю роль, он показывает мне эту ошибку:

(node:10256) UnhandledPromiseRejectionWarning: TypeError: Ok is not a constructor

что за пронлем? как я могу решить эту проблему ???

Ответы [ 3 ]

1 голос
/ 07 августа 2020

Если вы хотите экспортировать несколько классов из своего js файла, вы должны использовать exports.Ok = ... или экспортировать объект, содержащий ссылки на ваши классы.

class BadRerquest extends ApiResponse {
  constructor(message = "عملیات نا موفق") {
    super(ResponseStatus.BAD_REQUEST, false, message, null);
  }
};

class Ok extends ApiResponse {
  constructor(message = "عملیات با موفقیت انجام شد") {
    super(ResponseStatus.SUCCESS, true, message, null);
  }
};

module.exports = {
  BadRequest: BadRequest,
  Ok: Ok
}
1 голос
/ 07 августа 2020

Если это функция, которая использует класс Ok Ok(res) {return new Ok().Send(res);}, она должна иметь ключевое слово function перед function Ok(res) {return new Ok().Send(res);}, но вы получите ошибку, потому что ваш класс назван Ok и должен изменить имя функции.

0 голосов
/ 07 августа 2020

Исправьте некоторые проблемы в вашем коде:

class BadRerquest extends ApiResponse {
  constructor(message = "عملیات نا موفق") {
    super(ResponseStatus.BAD_REQUEST, false, message, null);
  }
};

class Ok extends ApiResponse {
  constructor(message = "عملیات با موفقیت انجام شد") {
    super(ResponseStatus.SUCCESS, true, message, null);
  }
};

module.exports = { BadRequest, Ok };

new Ok() следует заключить в круглые скобки:

Ok(res) {
   return (new Ok()).Send(res);
}
class RoleController extends BaseController {
  /***
   * Create Role
   */
  async CreateRole(req, res, next) {
      const role = new Role({
        name: req.body.name,
      });
      role.save();
      return this.Ok(res);
  }
  
};

module.exports = new RoleController();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...