http-errors

http-errors

Для зручного створення помилок скористаємось пакетом http-errors. Інсталюємо його командою:

npm install http-errors

Створюємо мідлвеар що буде займатись обробкою помилок. Один мідлвеар для обробок помилок, другий для обробки відсутності запрашуємо роутінга

import { isHttpError } from 'http-errors';

//Функція обробки помилок errorHandlerMiddleware.js
export const errorHandlerMiddleware = (error, req, res, next) => {

    if (isHttpError(error)) {
      res.status(error.status).json({
      status: error.status,
      message: error.message,
      data: {"message": error.message},
      });
    } else {
      res.status(500).json({
      status: 500,
      message: error.message,
      });
    }
  };
// notFoundHendker.js
//Функція обробки помилок у разі відсутності маршруту
export const notFoundHandler = (req, res) => {
    res.status(404).send('Oops! Route was not found!');
  };

Підключаємо ці мідлвеари для обробки помилок у головний файл server.js

import express from 'express';
import pino from 'pino-http';
import cors from 'cors';
import { env } from './utils/env.js';
import { ENV_VARS } from './const/const.js';

import contactsRouter from './routers/contacts.js';
import { errorHandlerMiddleware } from './middlewares/errorHandler.js';
import { notFoundHandler } from './middlewares/notFoundHandler.js';


//Запуск сервера
export const setupServer=()=> {

    //Ініціалізація сервера
    const app = express();
    
    // app.use(pino());
    // app.use(
    //     pino({
    //       transport: {
    //         target: 'pino-pretty',
    //       },
    //     }),
    //   );

    app.use(cors());

    //Додавання middleware для парсингу JSON
    app.use(
      express.json({
        limit: '1mb',
        type: ['application/json', 'application/vnd.api+json'],
      }),
    );
    
    //Підключення маршрутів
    app.use(contactsRouter);

    //підключення обробників помилок
    app.use(errorHandlerMiddleware);
    app.use(notFoundHandler);


    //Запуск сервера
    const PORT = env(ENV_VARS.PORT, 3000);

    app.listen(PORT, () => {
      console.log(`Server is running on port ${PORT}`);
    });
    
}

В модулі де необхідно обробити помилку, підключаємо бібліотеку і описуемо помилку

import createHttpError from 'http-errors';

export const getContactsById = async (id) => {
    const idobj = { _id: id };

    if (!mongoose.Types.ObjectId.isValid(id)) {
        throw createHttpError(404, 'invalid ID');
      }

      const contactsfound = await ContactCollection.find(idobj);

      if (!contactsfound || contactsfound.length === 0) {
        throw createHttpError(404, `Contact with id ${id} not found!`);
    }
    return contactsfound;
}

Тепер при створенні помилки чере throw createHttpError(404, `Contact with id ${id} not found!`); бібліотека автоматично перехватить помилку і передасть в обробку у мідлваре errorHandlerMiddleware.js або notFoundHandler.js

  • /sites/data/pages/http-errors.txt
  • Последнее изменение: 2024/06/03 19:02
  • tro