nodejs - 为什么我的异步函数会运行两次?

时间:2016-03-21 17:20:31

标签: javascript node.js asynchronous

我是node.js的新手并在线学习教程。 我正在尝试以下代码:

var http = require("http");

// create a server
http.createServer(function(req, res) {
    console.log("Received Request");
    res.writeHead(200, {'Content-Type':'application/json'});
    res.end("{'status':'200', 'message':'Hello World'}");
    console.log("Response Sent");
}).listen(process.env.PORT, process.env.IP);

我确实收到了正确的回复,但在控制台中输出是:

Received Request
Response Sent
Received Request
Response Sent

我想知道为什么我的代码会运行两次?我犯了一些错误吗? 请帮忙 !!

3 个答案:

答案 0 :(得分:3)

调试的最佳方法是检查网址

var http = require("http");

// create a server
http.createServer(function(req, res) {
    console.log(req.url);//add this line, I hope it will help
    console.log("Received Request");
    res.writeHead(200, {'Content-Type':'application/json'});
    res.end("{'status':'200', 'message':'Hello World'}");
    console.log("Response Sent");
}).listen(process.env.PORT, process.env.IP);

另外,正如Bassam Rubaye指出的那样,很可能是因为你的情况下的图标

答案 1 :(得分:2)

当您使用浏览器访问URL时,浏览器将发送对favicon的请求,然后发送另一个内容请求,这就是您看到两个请求的原因!

使用PostMan并请求相同的网址,您应该只看到一个请求。

答案 2 :(得分:2)

没错 - 这是正常的!您的浏览器发出多个请求。在nodejs - http.createServer seems to call twice处有一个类似的答案。

希望你学习node.js很开心!