Chrome中使用Nodejs时重复请求的问题

3

我正在使用Nodejs进行测试,以增加全局计数器,根据以下脚本。一切都正常工作,除了Chrome在刷新时执行两个连续的请求,这也导致计数器增加了两倍(请参见图像)。在Postman和Firefox中运行良好,只会在刷新时发生一个请求。我已经在Linux和Windows上运行应用程序进行了测试,并且Chrome的问题仍然存在。有人知道可能发生了什么吗?

server.js

const http = require('http');
const express = require('express');
const app = express();
const rotas = require("./route-test")(app);

const port = 3000;

const server = app.listen(process.env.PORT || port, function(){
    console.log('App listening port: ', port);
});

route-test.js

const myGlobalVars = require("./global-vars");

module.exports = (app) => {
    app.use('/', (req, res) => {
       res.end('Counter in: ' + myGlobalVars.counter); 
    });

    app.use(function(req, res, next){
        //console.log(req.originalUrl);
    });
}

global-vars.js

let myCounter = 0;

const _myVars = Object.create(Object.prototype, {
  dateInit: { 
    writable: false,
    configurable: false,
    value: new Date() 
  },
  counter: {
    configurable: false,
    get: function() { return myCounter++ },
    set: function(_val) {
      myCounter = _val;
    }
  }
});

module.exports = _myVars;

2 requests


我认为你必须在客户端提供源代码。 - iKoala
客户端没有源代码。这只是一个简单的测试。您所看到的代码是完整的,客户端将显示的唯一信息是“计数器:XX”(“XX”是当前计数的值)。 - wBB
3个回答

4
我检查了所有三个文件...在Firefox和Google Canary(开发者版本)中,我们只有一个请求(我们获得1个请求,只增加一次 myGlobalVars.counter )。在简单的Google Chrome版本中,我们有两个请求。其中一个是对favicon.ico的请求。因此,我们只需要添加条件来忽略favicon.ico请求,不要将 myGlobalVars.counter 值增加两次...
route-test.js中。
const myGlobalVars = require("./global-vars");

module.exports = (app) => {

  app.use('/', (req, res) => {

  // instead of this code res.end('Counter in: ' + myGlobalVars.counter);
  // add this condition
  if (req.url === '/') {
    res.end( `\n\n\nCounter in: ${myGlobalVars.counter}` );
  }

});


}

解释是正确的。如果你让node.js打印出request.url,你会看到它正在请求favicon。虽然我不一定同意你在req.url === '/'部分的解决方案,但我还是点了赞。 - WSBT

1
我认为这是浏览器向服务器请求获取/favicon.ico资源的请求。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接