JavaScript создайте this.response в тот момент, когда вы его называете.Поэтому я создал это поле, и typecript знал об этом.
Вторая проблема заключалась в том, что я определил свои маршруты в app.ts после обработки ошибок.
error.ts
const Errors = {
BadRequest: {
status: 400,
message: "Request has wrong format."
},
Unauthorized: {
status: 401,
message: "Authentication credentials not valid."
},
Forbidden: {
status: 403,
message: "You're missing permission to execute this request."
}
}
export class ErrorREST extends Error {
public response: { status: number; message: string; detail: string };
constructor(error: { status: number, message: string }, detail: string = undefined, ...args) {
super(...args);
this.response = {status: error.status, message: error.message, detail: detail};
}
}
app.ts
this.express.use('/api/users', usersRouter);
this.express.use(function (error, request, response, next) {
logRequest(console.error, request);
console.error("ERROR OCCURRED:");
console.error(error);
if (error == null || error.response == null) {//error is not a custom error
error = new ErrorREST(Errors.InternalServerError);
}
response.status(error.response.status).send(error.response);
вернуть ошибку пользователю
return next(new ErrorREST(Errors.Unauthorized));
return next(new ErrorREST(Errors.Unauthorized), "Authentication credentials not valid.");
![Custom RestError in Insomnia](https://i.stack.imgur.com/rla0o.png)