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(); }); }); } }
关键修复说明
- 修正响应头设置:将
res.setHeader = ("Location", "/");改为res.setHeader("Location", "/");,通过正确调用方法设置跳转路径,浏览器才能识别并执行重定向。 - 调整响应时机:把重定向逻辑移至
fs.writeFile的回调函数内,确保文件写入操作完成后再发送302响应,保证数据处理的完整性,同时让重定向逻辑在请求体处理完成后执行。
内容的提问来源于stack exchange,提问作者Gabriel Lima
相关产品推荐
相关产品推荐

