无法通过在node.js代码上应用ajax来加载资源:net :: ERR_EMPTY_RESPONSE错误

时间:2018-01-29 02:13:47

标签: javascript node.js ajax

我在前端运行一个带有ajax的脚本(通过“get”方法,路径位于“/ get?time =”),尝试从nodejs代码中的后端获取数据。但程序停在“res.send()”。然后在前面没有回应。任何人都可以提出任何解决方案吗?提前谢谢。

前端

        var config = {
        apiKey: "AIzaSyAUUcpvcottIkYXfpwAZfT4axxxxxxxxxx",
        authDomain: "test-9caab.firebaseapp.com",
        databaseURL: "https://test-9xxxx.firebaseio.com",
        projectId: "test-9xxxx",
        storageBucket: "test-9xxxxappspot.com",
        messagingSenderId: "1280039xxxxxx"
        };

        firebase.initializeApp(config);

        function get(){                                     
            var req = new XMLHttpRequest();                 
            req.open("get","/get?time="+time);                                                                      
            req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
            req.onload = function(){                        
                var data = JSON.parse(req.responseText);    
                show(data);                                 
            };
            req.send();                                     
        }

        function show(data){                                
            var list = document.getElementById("list");     
            list.innerHTML="";  
            for(var i=0; i<data.length; i++){               
                list.innerHTML=data[i].time.bold()+"<br/>"+data[i].temp+"<br/>"+data[i].humid+""+"<hr/>"+list.innerHTML;
                time =data[i].time+1;                   
            }
        }
        var time=0;  
        window.onload = function(){                     
            get();
            window.setInterval(get, 10000);                 
        }

后端

app.use(express.static("public"));

  app.get("/get", function (req, res) {
    var time = req.query.time;
    info.orderByChild("time").startAt(time).once("value",function(snapshot){
        var total = snapshot.numChildren();     
        var messages =[];
        snapshot.forEach(function(itemSnapshot){
            messages.push(itemSnapshot.val());      
            if(messages.length >=total){
                res.json(messages);
            }
        })
    });
  });

并在服务器启动并运行时使用localhost:5438 / N01_index.html在Chrome上运行。

然后我在控制台上收到错误消息

N01_index.html:45 GET http://localhost:5438/get?time=0 net::ERR_CONNECTION_REFUSED
Failed to load resource: net::ERR_EMPTY_RESPONSE              get?time=0

2 个答案:

答案 0 :(得分:0)

如果来自forEach的messages.lengthif条件,您的脚本不会发送任何内容,并将res.json(message)放在forEach之外。在这种情况下,如果消息为空,则前端接收空数组

答案 1 :(得分:0)

感谢您的回复。我意识到前端剂量不能从后端获取任何数据。我修改了下面第2和第3行的前端。问题就解决了。

app.get("/get", function (req, res) {
    var time = parseInt(req.query.time);
    var info = firebase.database().ref('/info');

    info.orderByChild("time").startAt(time).once("value",function(snapshot){
        var total = snapshot.numChildren();         
        console.log("total= ",total);
        var messages =[];
        snapshot.forEach(function(itemSnapshot){
            messages.push(itemSnapshot.val());      
            console.log(messages);
            if(messages.length >=total){
                res.json(messages);
            }
        })
    });
});