Reputation: 451
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
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
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
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