#node.js #error-handling #koa #koa.js
Вопрос:
Я хочу создать промежуточное программное обеспечение для обработки ошибок для своего приложения. Я использовал KoaJS для своего веб-приложения и свою базовую функцию обработки ошибок, подобную этой:
обработчик ошибок.ts:
import { Context } from "koa";
export const errorHandler : any = (err : Error, ctx : Context ) =>{
console.log("Something went wrong") ====>>> Its Work
ctx.status = 403. ========>>>> Not work
ctx.body = "asdasd" =========>>>> Not work
}
И моя конечная точка, которая использовала такой обработчик ошибок:
public static async helloWorld(ctx: BaseContext): Promise<void> {
throw new Error ('Error Here');
}
И мой app.js вот так:
import Koa from "koa";
import { errorHandler } from './middleware/error-handler';
...
app.use(errorHandler)
...
И когда я отправляю запрос в конечную точку, я получаю такую ошибку :
Почему я получаю эту ошибку? Как я могу решить эту проблему?
Ответ №1:
Ваш обработчик ошибок не работает, потому что вы не улавливаете ошибку.
Ваш код работает следующим образом:
Поскольку у вас есть use(errorHandler)
и в обработчике ошибок нет await next()
, ваш полный обработчик ошибок выполняется первым (независимо от того, есть ошибка или нет). Затем ваша helloWorld
функция будет выполнена. И так как есть ошибка, не обнаруженная, Koa отвечает клиенту на 404, который не найден.
Как это должно быть:
У вашего обработчика ошибок должно быть a await next()
, затем он должен проверить, есть ли ошибка. Если да, то это необходимо записать, а затем вы можете указать код состояния и результирующее тело.
Возможное решение:
Я думаю, что ваш обработчик ошибок должен выглядеть примерно так:
export const errorHandler : any = async (ctx : Context, next ) =>{
try {
await next();
} catch (err) {
console.log("Something went wrong");
ctx.status = 403;
ctx.body = err;
}
}