为什么node.js脚本被调用两次?

时间:2015-10-23 13:05:02

标签: javascript node.js

我是Node.js的初学者 我在Node.js中编写了第一个脚本,如下所示:

var count = 0;
var http = require('http');
var serv = http.createServer(function (req, res) {
    count++;
    console.log("why two?:" + count);
    res.writeHead(200,{'Content-Type': 'text/html'});
    require('colors');
    if (count % 2 == 0) {
        console.log('count:' + count);
        console.log('smashing node'.rainbow);
        res.end('<marquee>Smashing Node</marquee>');
    } else {
        console.log('count:' + count);
        console.log('WTF'.rainbow);
        res.end('<h4>Smashing Node</h4>');
    }
});
serv.listen(3000);

然后我运行这个脚本

node first.js

在浏览器中,访问http://localhost:3000 控制台的结果是:

why two?:1
count:1
WTF
why two?:2
count:2
smashing node

为什么代码被调用两次? 感谢

3 个答案:

答案 0 :(得分:4)

因为正在提出两项请求。

可能一个用于/,另一个用于/favicon.ico

您的代码在处理请求时并不关心路径是什么。

您可以通过查看浏览器的开发者工具的“网络”标签或检查req对象的内容来测试。

答案 1 :(得分:0)

只要您在http://localhost:3000

上提出请求,就会调用匿名函数

所以也许某种程度上你要求两次(例如/和/favicon.ico) 尝试打开chrome dev工具,在控制台选项卡中,您可能会看到错误,找不到favicon.ico。

或者您可以使用morgan来跟踪请求:

var app = require('express')();
var morgan = require('morgan');
app.use(morgan('dev'));

它会记录每个请求,包括代码和URL-s。它需要表达。

答案 2 :(得分:0)

var count = 0;
var http = require('http');
var serv = http.createServer(); 
serv.on('request',function(req,res){
    count++;
    console.log("why two?:" + count);
    res.writeHead(200,{'Content-Type': 'text/html'});

    if (req.url=='/') {
        console.log(req.method);
        console.log(req.headers);
        console.log(req.url);
        res.end('<marquee>Smashing Node</marquee>');
    } 
});
serv.listen(3000);

在此只检查'/'网址,然后回复....所以返回选框