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
相关产品推荐
相关产品推荐

