在这段代码中,我正在nodejs中创建服务器 在这段代码中,我认为它应该先重定向页面,然后再将其写入文件,因为writeFile不保存服务器
const server = http.createServer((req, res)=>{
const url = req.url;
const method = req.method;
if(url === '/')
{
res.write('<html>');
res.write('<head><title>Enter Message</title><head>');
res.write('<body><form action="/message" method="POST"><input type="text" name="message"><button type="submit">Send</button></form></body>');
res.write('</html>');
***console.log("in if")***
return res.end();
}
if(url === "/message" && method === "POST")
{
***console.log("in if 2")***
const body = [];
req.on('data',(chunk)=>{ready to be read
console.log(chunk);
body.push(chunk);
});
return req.on('end',()=>{
***console.log("in end")***
const parsebody = Buffer.concat(body).toString();
const message = parsebody.split('=')[1];
fs.writeFile("message.txt",message,(err)=>{
***console.log("writing to file")***
***`console.log(parsebody)`***
});
res.statusCode = 302;
res.setHeader('Location','/');
res.end();
});
}
我认为应该是
in if
in if 2
<Buffer 6d 65 73 73 61 67 65 3d 6a 64 73 6e 6a 65 73 6e 65 6a 73>
in end
in if
writing to file
message=jdsnjesnejs
但是输出将变为
in if
in if 2
<Buffer 6d 65 73 73 61 67 65 3d 6a 64 73 6e 6a 65 73 6e 65 6a 73>
in end
writing to file
message=jdsnjesnejs
in if
我认为应该先重定向然后写 和 我还想知道以上哪几行代码触发了重定向
答案 0 :(得分:0)
此触发重定向的代码应为:
res.statusCode = 302;
res.setHeader('Location','/');
res.end();
从外观上看,这已经是正确的。您确定这不仅是一场比赛,而且在浏览器没有时间进行第二次请求之前,文件的写入很快就完成了吗?
您可以将setTimeout(() => fs.writeFile(...), 2000)
放在fs.writeFile
周围,看看它是否按照您的期望来排列。
由于console.log的缓冲区很小,我怀疑这只是一场比赛:fs.writeFile
“只是”需要写一个文件,而重定向是“对浏览器/套接字的响应” ->“浏览器解释响应”->“浏览器为'/'创建新请求”->“服务器处理新请求”