Промежуточное программное обеспечение KoaJS Custom ErrorHandler теперь работает

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