Nodejs和简单的数学运算不起作用

xRo*_*bot 3 node.js

我只需要一种方法来在每次刷新页面时减少用户的硬币.这是我的计划:

    var http = require('http');

    var coins = 100;

    var server = http.createServer(function (req, res) {
      res.writeHead(200, {'Content-Type': 'text/plain'});
      res.write("Hello World");

      coins -= 1;
      res.write('Your coins: ' + coins + '\n');

      res.end();
    })

    server.listen(1338, '127.0.0.1');

    console.log('Server running at http://127.0.0.1:1338/');
Run Code Online (Sandbox Code Playgroud)

这是我每次刷新页面时得到的内容:

Your coins: 99
Your coins: 97
Your coins: 95
Your coins: 93
Your coins: 91
Your coins: 89
Your coins: 87
...
Run Code Online (Sandbox Code Playgroud)

如你所见,它减少2而不是1.为什么?

wei*_*nda 6

让我们从浏览器的角度更深入地看一下它.浏览器加载favicon.ico了你的选项卡标题旁边的一个很小的(通常是24x24)图标.

该请求由代码处理(在答案中正确指出).

解决方案似乎很简单:1)使用XHR并禁用飞行前(用于测试); 或者忽略OPTIONS动词; 2)忽略/favicon.icoURL.


如果这是因为OPTIONS它是飞行前动词,你可以有一个显式的GET处理程序.

您可以查看官方Http模块文档的这个子部分.:)


因此,经过一些挖掘,OPTIONS 罪魁祸首(XHR).以下作品应该有效:

var http = require('http');

var coins = 100;

var server = http.createServer();
server.on( 'request', function( req, res ) {

    console.log( req.method );
    var method = req.method;
    if ( method === 'GET' && req.url.indexOf( 'favicon.ico' ) === -1 ) {
        coins -= 1;
    }


    res.writeHead(200, {
        'Content-Type': 'text/plain',
        'Access-Control-Allow-Origin': '*'
    });
    res.write("Hello World");
    res.write('Your coins: ' + coins + '\n');

    res.end();

} );

server.listen(1338, '127.0.0.1');

console.log('Server running at http://127.0.0.1:1338/');
Run Code Online (Sandbox Code Playgroud)