一段很简单的 Node.js 代码,可是 Chrome 出现了反常现象

发布于 1周前 作者 htzhanglong 来自 nodejs/Nestjs

一段很简单的 Node.js 代码,可是 Chrome 出现了反常现象


// happy coding :)

var connect = require(‘connect’); var session = require(‘express-session’);

var app = connect() .use(session({ secret: ‘keyboard cat’ })) .use(function(req, res, next){ var sess = req.session; if (sess.views) { sess.views++; res.setHeader(‘Content-Type’, ‘text/html’); res.write(’<p>views: ’ + sess.views + ‘</p>’); res.end(); } else { sess.views = 1; res.end(‘Welcome to the session demo. Refresh!’); } }) .listen(3000);

就是想测试一下 express-session 这个模块,用的是官方文档的例子,用 Edge 和 Firefox 浏览器测试是正常的,输出 1 , 2 , 3 views 这样增长;可是 Chrome 浏览器( Winidows 10 , v52 )却是这样增长的: 1 , 3 , 5 , 7... views 。 禁用掉所有 Chrome 插件测试还是一样。求解惑,谢谢。


4 回复

有可能是多请求了 favicon ,在代码里打印下请求 url 就知道了。


嗯,是的! Chrome 每次请求会附带一次 /favicon.ico 的请求, Edge 和 Firefox 则没有。谢谢!

Firefox 也会请求的,不过一般只是刚打开页面时请求一次

针对您提到的 Node.js 代码在 Chrome 中出现反常现象的问题,首先需要明确的是,Node.js 和 Chrome 虽然都基于 V8 引擎,但它们的运行环境和用途截然不同。Node.js 是服务器端运行环境,而 Chrome 是浏览器,用于前端页面展示和交互。因此,直接在 Chrome 中运行 Node.js 代码通常会导致错误或异常行为。

假设您的 Node.js 代码非常简单,如下所示:

const http = require('http');

http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World\n');
}).listen(3000, '127.0.0.1', () => {
  console.log('Server running at http://127.0.0.1:3000/');
});

这段代码在 Node.js 环境下会启动一个 HTTP 服务器,但在 Chrome 中直接运行会因为缺少 require 函数等 Node.js 特有的全局变量而失败。

如果您想在浏览器中测试类似的功能,应使用前端技术栈,如 Fetch API 来发起 HTTP 请求,或使用 WebSockets 进行实时通信。以下是一个使用 Fetch API 的简单示例:

fetch('https://jsonplaceholder.typicode.com/todos/1')
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error('Error:', error));

此代码在 Chrome 控制台中可以正常运行,因为它使用了浏览器支持的 API。如果您的 Node.js 代码确实需要在浏览器中运行,请考虑将其重构为适合前端的技术实现。

回到顶部