我实现了以下路由器,它每秒发送一次数据。
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