【发布时间】:2017-12-08 16:12:59
【问题描述】:
更新:
即使正在为 favicon.ico 发送另一个请求并且函数正在再次执行(两个 console.log(data) 输出),为什么响应对象没有被发送两次?
另外,有没有办法不发送对 favcion.ico 的请求,因为我不希望我的函数无用地运行两次?
我创建了一个非常简单的 servlet 来接受 GET(默认)并在读取文件后将内容返回给浏览器
var http = require("http");
var fs = require("fs");
var num=0;
http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'});
var data = '';
// Create a readable stream
var readerStream = fs.createReadStream('input.txt');
// Set the encoding to be utf8.
readerStream.setEncoding('UTF8');
// Handle stream events --> data, end, and error
readerStream.on('data', function(chunk) {
data += chunk;
});
readerStream.on('end',function(){
console.log(data); //To print same file content in the console
response.end(data);
});
readerStream.on('error', function(err){
console.log(err.stack);
data+="\n\n"+err.stack;
});
}).listen(8081);
// Console will print the message
console.log('Server running at http://127.0.0.1:8081/');
但是每次我运行这个 servlet 并在 http://localhost:/8081 发出请求时,我会在控制台上打印两次文件的内容,但在浏览器窗口中只打印一次(这是预期的行为)。
控制台行为的原因是什么?
另外,我修改了程序,添加了一个计数器来计算函数针对每个请求运行了多少次(对于console 和response,将值附加为data+num),发现它是two 但第一次执行函数的响应是浏览器收到的响应,而不是第二次响应(浏览器窗口打印 data+1 表示第一个请求)。
【问题讨论】:
-
下一个请求打印
data变量中的数据,并附加 3,然后是 5,依此类推...
标签: javascript node.js servlets