我是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);
然后我运行这个脚本
在浏览器中,访问http://localhost:3000 控制台的结果是:
why two?:1
count:1
WTF
why two?:2
count:2
smashing node
为什么代码被调用两次? 感谢
答案 0 :(得分:4)
因为正在提出两项请求。
可能一个用于/
,另一个用于/favicon.ico
。
您的代码在处理请求时并不关心路径是什么。
您可以通过查看浏览器的开发者工具的“网络”标签或检查req
对象的内容来测试。
答案 1 :(得分:0)
所以也许某种程度上你要求两次(例如/和/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);
在此只检查'/'
网址,然后回复....所以返回选框