res.end() 不关闭 NodeJS 中的脚本执行

问题描述

返回 res.end() 不关闭脚本执行。 最初它呈现表单,当我提交时,它执行 if 语句的右大括号下面的代码块。 我认为执行应该在 return res.end() 行结束。

const http = require("http");

const server = http.createServer((req,res) => {
  const url = req.url;
  if (url === "/") {
    res.write("<html>");
    res.write("<head><title>FORM</title></head>");
    res.write(
      "<body><form action='/message' method='POST'><input type='text' name='message' /><button>Send</button></from></body>"
    );
    res.write("</html>");
    return res.end();
  }
  res.setHeader("Content-Type","text/html");
  res.write("<html>");
  res.write("<head><title>APP</title></head>");
  res.write("<body><h1>Demo APP</h1></body>");
  res.write("</html>");
});

server.listen(4000);

解决方法

请将 console.log(req.url) 添加到请求处理程序的开头。你会发现:

return res.end();

确实通过从请求处理程序回调中返回来停止执行该特定请求。

但是,您很可能会收到另一个传入的 http 请求,可能是针对 favicon.ico。一般来说,您永远不应该在请求处理程序中使用代码对正在请求的资源零关注,除非它发回像 404 这样的错误,因为有很多请求可能会向您的 http 服务器发出一些标准资源 sucn如 robots.txtfavicon.icositemap.xml 等,除非您为这些请求发送适当的数据,否则您不应响应这些请求。

,

您可能希望将其余代码放在 ELSE 块中以确保它仅在 URL!=="/" 时运行