如何处理Next.js API路由中的错误?[已关闭]

vbkedwbf  于 2023-08-04  发布在  其他
关注(0)|答案(3)|浏览(111)

已关闭。此问题需要details or clarity。它目前不接受回答。
**希望改进此问题?**通过editing this post添加详细信息并阐明问题。

11天前关闭。
Improve this question
处理Next.js API路由中错误的最佳方法是什么?当前Next总是重定向到我的错误页面(404/500),这反过来又发送我的哨兵错误日志疯狂。有什么办法可以防止这种情况吗?我觉得API路由中的错误应该只返回一个带有状态的JSON消息。我尝试捕捉抛出的错误并返回适当的响应,这些响应在本地工作,但在生产环境中仍然会重定向。有什么想法吗

6tr1vspr

6tr1vspr1#

我创建一个自定义错误类

class ErrorHandler extends Error {
    constructor(message, statusCode) {
      super(message);
      this.statusCode = statusCode;
      //  captureStackTrace returns a string that reperesents the location of that particular error in the call. gives us a stack that helps us to find the location of that error in the code. this will help us to find the exact error in our code.
      Error.captureStackTrace(this, this.constructor);
    }
  }

字符串
然后为了避免写try/catch块,我写了一个自定义函数来处理异步错误:

const catchAsyncErrors = (func) => (req, res, next) =>
  // passing a controller function
  Promise.resolve(func(req, res, next)).catch(next);


然后是控制器:

const getSingleItem = catchAsyncErrors(async (req, res, next) => {
  // in express we had req.params
  const item = await Item.findById(req.query.id);
  if (!item) {
    return next(new ErrorHandler("Item not found with this id", 404));
  }
  res.status(200).json({
    success: true,
    item,
  });
});

nxagd54h

nxagd54h2#

您可以使用res.status设置响应。

async function example(req, res) {

  switch (req.method) {
    case "GET":
      try {
        const {  data } = await foo();
        res.status(200).json({ ...data});

      } catch (error) {
        console.error(error);
        res.status(error.requestResult.statusCode).send(error.message);
      }
    default:
      res.status(405).end(); //Method Not Allowed
      break;
  }
}

export default example;

字符串

mdfafbf1

mdfafbf13#

如果你正在使用nextjs 13应用程序目录,有两种方法使用fetch new Response和另一种使用NextResponse。Video reference from codeCodegrepper

import { NextRequest, NextResponse } from "next/server";
try{
  ........
   try code 
  .........
}catch(error){
  catch (error) {
    //Response given by fetch api where we have to stringify our object 
    // return new Response(JSON.stringify({ error: "could not fetch group by" }), { status: 500 });
    
    //Here Nexjs simple our work by giving NextResponse
    return NextResponse.json({ error: "Could not fetch group by" }, { status: 500 });
  }
}

字符串

相关问题