【问题标题】:Nextjs ERR_HTTP_HEADERS_SENT in POST handler, from a GET requestNextjs ERR_HTTP_HEADERS_SENT 在 POST 处理程序中,来自 GET 请求
【发布时间】:2022-01-26 07:51:37
【问题描述】:

所以我正在为我的应用程序创建一个简单的路由,它基本上调用另一个服务器并将数据返回给我(由于未启用 CORS,我无法从前端 atm 执行此操作)。

const getBotState: NextApiHandler = async (req, res) => {
  console.log(req.method);

  switch (req.method) {
    case 'GET':
      try {
        res.status(200).json({ someData: "hi get" });
      } catch (e) {
        console.log(e);
        res.status(404).json({ err: e });
      }
    case 'POST':
      try {    
        res.status(200).json({ someData: "hi post" }); // this is the line that breaks it
      } catch (e) {
        console.log('post error');
        console.log(e);
        res.status(404).json({ err: e });
      }
    default:
  }
};

export default getBotState;

问题是在我添加POST 案例后开始的。

如果我注释掉 res.status.... 行,错误就会消失,但我目前只向这个 API 端点发出 GET 请求,我根本没有发出 POST 请求,但问题是POST 情况下的块是触发错误的原因。

【问题讨论】:

    标签: next.js


    【解决方案1】:

    switch 有一个独特的属性,它的属性是它能够“通过”并访问下一个case 语句。这是设计使然,每种编程语言都这样做。

    如何解决这个问题?添加break

    const getBotState: NextApiHandler = async (req, res) => {
      console.log(req.method);
    
      switch (req.method) {
        case 'GET':
          try {
            res.status(200).json({ someData: "hi get" });
          } catch (e) {
            console.log(e);
            res.status(404).json({ err: e });
          }
          break;
    
        case 'POST':
          try {    
            res.status(200).json({ someData: "hi post" }); // this is the line that breaks it
          } catch (e) {
            console.log('post error');
            console.log(e);
            res.status(404).json({ err: e });
          }
          break;
    
        default:
      }
    };
    
    export default getBotState;
    

    然后你就完成了!

    来自MDN Docs

    与每个 case 标签关联的可选 break 语句确保程序在执行匹配的语句后跳出 switch,并在 switch 后面的语句处继续执行。如果省略了break,程序将继续执行switch语句中的下一条语句。如果在它之前有 return 语句,则不需要 break 语句。

    【讨论】:

    • 天哪,我好久没写开关/案例了,我忘记了其中涉及到中断啊哈哈哈,谢谢,菜鸟的错误。
    • 别担心!我添加了一个额外的参考。如果对您有帮助,请不要忘记将其标记为已接受!谢谢!
    猜你喜欢
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    • 2015-06-28
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多