gpt4 book ai didi

javascript - 使用 NODE.JS 解析 JSON url 并使用 SOCKET.IO 保持最新状态

转载 作者:行者123 更新时间:2023-12-02 18:40:58 24 4
gpt4 key购买 nike

我对node.js和socket.io非常陌生,我试图弄清楚如何从外部url读取JSON数组,然后解析它并显示在主页上。然后我相信我使用 socket.io 来保持该连接打开并在发生更改时保持 JSON 对象最新。

这就是我到目前为止对 Node.js 的了解。

var http = require("http");
var fs = require('fs');
var options = 'http://api.trakt.tv/user/watching.json/APIKEY/USERNAME';

var server = http.createServer(function(request, response){
console.log('Connection');

http.get(options, function(res){
var data = '';

res.on('data', function (chunk){
data += chunk;
});

res.on('end',function(){
var obj = JSON.parse(data);
console.log( obj );
})

});
response.end();
});

server.listen(8888);

当我连接到 localhost:8888 时,我看到控制台显示“连接”,然后控制台记录 JSON 对象的内容。这是我所能得到的。我将不胜感激,并提供有关如何在我的索引页面上显示 JSON 对象并设置其样式并使其保持最新的帮助和指示

TIA标记

最佳答案

好的,现在我明白了问题所在,这是我的答案。这将是一个充满建议的地方,因为没有真正的“正确方法”来做你想做的事。如果是的话,我们可以放心的是,您将想要使用 WebSockets(或者在本例中为 socket.io,它可以在旧版浏览器上模拟 websocket)。

您当前的拉取代码可能没问题,但您需要调整该代码以在超时时运行,以便经常拉取最新的 JSON。此外,我们希望将其各个移动部分保持独立:从 API 读取/写入缓存、监听缓存,然后将缓存提供给连接的客户端:

var http = require("http");
var fs = require('fs');
var url = 'http://api.trakt.tv/user/watching.json/APIKEY/USERNAME';
var cacheFile = '/path/to/cachefile';
var connectedSockets = [];

function fetchJson() {
http.get(url, function(res) {
body = '';

res.on('data', function(data) {
body += data;
});

res.on('end', function() {
fs.writeFileSync(cacheFile, body);
setTimeout(fetchJson, 1000); // Fetch it again in a second
});
})
}

fetchJson(); // Start fetching to our JSON cache

// Start watching our cache file
fs.watch(cacheFile, function(event, filename) {
if(event == 'change') {
fs.readFile(cacheFile, function(data) {
connectedSockets.forEach(function(socket) {
socket.emit('data', JSON.parse(data));
});
});
}
});

// Now setup our socket server
var io = require('socket.io').listen(8888);
io.sockets.on('connection', function(socket) {
connectedSockets.push(socket);
});

我不在这里处理断开连接(您需要从connectedSockets列表中删除断开连接或错误的套接字),而且我实际上并没有运行这个......但它应该让您知道在哪里头。

在客户端,这应该是一个简单的问题:

var socket = io.connect('http://localhost:8888');
socket.on('data', function (data) {
// Data will contain your JSON object, do your DOM manip here
});

关于javascript - 使用 NODE.JS 解析 JSON url 并使用 SOCKET.IO 保持最新状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16844078/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com