MERN Part-4.2를 사용하는 ECOMMERCE 웹 사이트( 백엔드 오류 처리기 {asynchronous} )

이 블로그에서는 비동기 함수를 위한 오류 처리기를 만들 것입니다.



이 오류 처리기를 만들지 않으면 어떤 문제가 발생하는지 봅시다.


여기에서 name를 생성하는 동안 Product 속성을 제거했으며 Error를 얻고 서버가 충돌합니다. 따라서 이 문제를 극복하기 위해 Error Handler를 만들 것입니다.

1 단계 catchAsyncErrors.js 폴더 안에 middleware라는 파일을 만듭니다.

2 단계 이제 theFunc (아무 이름이나 쓸 수 있음)라는 이름의 함수를 req , res & next 3개의 매개변수로 만들 수 있습니다.


그런 다음 javascript라는 Promise의 inbuild 클래스와 resolve를 인수로 사용하는 메서드theFunc(req, res, next)를 사용합니다. 또한 그 후에 .catch 인수가 있는 next 메서드를 넣습니다.

resolve & catchtry catch 블록처럼 작동합니다.

3단계 이제 catchAsyncErrors 파일에서 productController를 가져옵니다.


이제 catchAsyncErrors() 앞에 async()를 추가하면 코드는 다음과 같습니다.

이제 해당 오류가 계속 발생하는지 테스트해 보겠습니다.





Step-4 우리가 만들 함수뿐만 아니라 이전에 만든 모든 함수에 대해 이 작업을 수행합니다.

const Product = require("../models/productModel");
const ErrorHandler = require("../utils/errorHandler");
const catchAsyncErrors = require("../middleware/catchAsyncErrors");

// create product --- Admin
exports.createProduct = catchAsyncErrors(async (req, res, next) => {
  const product = await Product.create(req.body);

  res.status(201).json({
    success: true,
    product,
  });
});

// Get all products
exports.getAllProducts = catchAsyncErrors(async (req, res, next) => {
  const products = await Product.find();

  res.status(200).json({
    success: true,
    products,
  });
});

// get product details
exports.getProductDetails = catchAsyncErrors(async (req, res, next) => {
  const product = await Product.findById(req.params.id);

  if (!product) {
    return next(new ErrorHandler("Product Not Found", 404));
  }

  res.status(200).json({
    success: true,
    product,
  });
});

// Update product ---Admin
exports.updateProduct = catchAsyncErrors(async (req, res, next) => {
  let product = await Product.findById(req.params.id);

  if (!product) {
    return next(new ErrorHandler("Product Not Found", 404));
  }

  product = await Product.findByIdAndUpdate(req.params.id, req.body);

  res.status(200).json({
    success: true,
    product,
  });
});

// Delete Product ---Admin
exports.deleteProduct = catchAsyncErrors(async (req, res, next) => {
  const product = await Product.findById(req.params.id);

  if (!product) {
    return next(new ErrorHandler("Product Not Found", 500));
  }

  await product.remove();

  res.status(200).json({
    success: true,
    message: "Product Deleted Successfully",
  });
});


에서 처리를 위한 오류 처리기Unhandled Promise Rejection 등을 더 만들 예정입니다....

좋은 웹페이지 즐겨찾기