You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js页面重定向失效:返回302状态码却无法跳转到根路径

修复POST请求后302重定向失效问题

你的代码存在两个关键问题导致重定向功能异常:

  • 响应头设置语法错误:res.setHeader = ("Location", "/"); 这行是错误的赋值操作,并非调用setHeader方法,导致浏览器无法接收到正确的跳转目标Location头。
  • 响应发送时机不当:当前代码在处理请求体的end事件触发前就发送了响应,会导致文件写入逻辑还未完成就结束请求,虽然这不是重定向失效的直接原因,但会引发数据处理不完整的问题。

修复后的完整代码

const fs = require("fs");

function requestHandler(req, res) {
  const url = req.url;
  const method = req.method;
  if (url === "/") {
    res.write("<html>");
    res.write("<head><title> Minha primeira página! </title></head>");
    res.write(
      "<body><form action='/message' method='POST'><input type='text' name='message'><button type='submit'>Enviar</button></form></body>"
    );
    res.write("</html>");
    return res.end();
  }
  if (url === "/message" && method === "POST") {
    const body = [];
    req.on("data", (chunk) => {
      console.log(chunk);
      body.push(chunk);
    });
    req.on("end", () => {
      const parsedBody = Buffer.concat(body).toString();
      const message = parsedBody.split("=")[1];
      // 确保文件写入完成后再发送重定向响应
      fs.writeFile("message.txt", message, (err) => {
        res.statusCode = 302;
        res.setHeader("Location", "/"); // 修正为正确的方法调用
        return res.end();
      });
    });
  }
}

关键修复说明

  1. 修正响应头设置:将res.setHeader = ("Location", "/");改为res.setHeader("Location", "/");,通过正确调用方法设置跳转路径,浏览器才能识别并执行重定向。
  2. 调整响应时机:把重定向逻辑移至fs.writeFile的回调函数内,确保文件写入操作完成后再发送302响应,保证数据处理的完整性,同时让重定向逻辑在请求体处理完成后执行。

内容的提问来源于stack exchange,提问作者Gabriel Lima

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 03:55:15