使用 angularjs 在 nodejs 中获取 res.write() 的响应



我实现了以下路由器,它每秒发送一次数据。

router.get('/api/test-router', function(req,res){
    var currentTime = new Date();
    res.writeHead(200, {'Content-Type': 'text/html'});
    setInterval(function(){
        res.write(
            currentTime.getHours() + ':' + currentTime.getMinutes() + ':' + currentTime.getSeconds() + "n"
        );
        setTimeout(function() {
            res.end();
        }, 10000);
    },1000);
})

我想使用 angularjs $http.get 方法在我的客户端获取上述路由器的响应。

$http.get('/api/test-router').then(function(response){
    console.log(response.data)
});

上面的 angularjs 代码不会在控制台窗口中打印任何内容。

请帮我解决这个问题。

实际上,我设法解决了本机JavaScript中的XMLhttpRequest((的问题。

var url = '/api/test-router';
var xhr = new XMLHttpRequest(); 
xhr.open("GET", url,true);
xhr.seenBytes = 0;
xhr.onreadystatechange = function() { 
    if(xhr.readyState > 2) {
        var newData = xhr.responseText.substr(xhr.seenBytes);
        console.log(newData);
        xhr.seenBytes = xhr.responseText.length; 
    }
};
xhr.send();
服务器

端代码可能会引发异常,您不能向客户端发送多个响应(查看您的代码,每秒设置一个超时,这将在 10 秒后触发res.end(),这意味着多次结束响应,并且由于您结束了响应,因此无法再写入 res(。

您正在尝试强制从服务器到客户端的多个响应,并且无法使用纯 XmlHTTPrequest 执行此操作

使用 ajax 调用的标准方法,服务器将在收到请求后立即响应,除非客户端明确请求,否则它无法发送数据。

如果您需要服务器将数据推送到客户端,则很可能需要 websocket 连接。 双方都可以随时发送数据。ajax 请求不是这种情况。

看看套接字IO

最新更新