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

Node.js HTTP请求事件监听器触发多次问题求助

Node.js http服务器刷新计数递增2的问题解决

你猜的没错,问题确实是浏览器每次刷新会触发两次请求——除了你手动发起的页面请求,浏览器还会自动发送一个GET /favicon.ico的请求,用来获取网站的图标,这就导致你的count被执行了两次累加操作。

验证问题

可以先在回调里打印请求路径,直观看到两次请求:

const http = require("http");
let count = 0;
const server = http.createServer((req, res) => {
  console.log(req.url); // 打印当前请求的路径
  res.write(count.toString());
  res.end();
  count += 1;
});

server.listen(3000);

运行后刷新页面,控制台会输出两行内容:/(页面本身的请求)和/favicon.ico(浏览器自动发起的图标请求)。

解决方法

只对根路径/的请求进行计数,忽略favicon的请求即可:

const http = require("http");
let count = 0;
const server = http.createServer((req, res) => {
  if (req.url === "/") {
    res.write(count.toString());
    count += 1;
  }
  res.end(); // 对所有请求返回响应,避免浏览器挂起等待
});

server.listen(3000);

这样每次刷新页面,只有访问根路径的请求会触发count累加,就能得到预期的每次递增1的效果。

如果之后需要处理更复杂的路由逻辑,推荐使用Express这类Web框架,它能更便捷地管理不同路径的请求,不过现阶段用原生http模块通过判断req.url过滤请求就足够解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 03:31:02