kianoush dortaj
kianoush dortaj

Reputation: 451

TypeError: Ok is not a constructor

i have a js file in this file i have multiple class :

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);
  }
};

and i have a BaseController i use the Ok class :

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

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

and i have a RoleController , this controller inheritance the BaseController and i need to use the 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);
  }
  
})();

but when i create a Role it show me this Error :

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

whats the pronlem ? how can i solve this problem ???

Upvotes: 2

Views: 1479

Answers (3)

Getter Jetter
Getter Jetter

Reputation: 2081

If you want to export multiple classes from your js file you have to use exports.Ok = ... or export an Object containing the references to your classes.

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
}

Upvotes: 1

andsilver
andsilver

Reputation: 5972

Please fix some issues in your code:

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() should wrapped in parentheses:

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();

Upvotes: 0

Animal
Animal

Reputation: 386

If this is a function that uses Ok class Ok(res) {return new Ok().Send(res);}, it should have function keyword before like function Ok(res) {return new Ok().Send(res);}, but you will have error because you have your class named Ok and should change function name.

Upvotes: 1

Related Questions