首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >1-3 'SyntaxError:在节点中流推时每分钟发生意外的JSON输入错误

1-3 'SyntaxError:在节点中流推时每分钟发生意外的JSON输入错误
EN

Stack Overflow用户
提问于 2021-04-15 20:42:42
回答 1查看 130关注 0票数 2

使用express和Node.js,我使用和指针npm包访问API,以提取与关键字相关的tweet。流是功能性的,我正在使用以下(简化的)代码成功地提取tweet:

代码语言:javascript
复制
const needle = require('needle');
const TOKEN = // My Token 
const streamURL = 'https://api.twitter.com/2/tweets/search/stream';

function streamTweets() {

    const stream = needle.get(streamURL, {
        headers: {
            Authorization: `Bearer ${TOKEN}`
        }
    });

    stream.on('data', (data) => {
        try {
            const json = JSON.parse(data); // This line appears to be causing my error
            const text = json.data.text;
        } catch (error) {
             console.log("error");
        }
    });
}

但是,无论我使用哪个搜索术语(以及随后的大小量的tweet),catch块都会持续记录每分钟1-3个错误,如下所示:

代码语言:javascript
复制
SyntaxError: Unexpected end of JSON input
    at JSON.parse (<anonymous>)
    at PassThrough.<anonymous> (C:\Users\danie\OneDrive\Documents\Personal-Projects\twitter-program\server.js:56:31)
    at PassThrough.emit (events.js:315:20)
    at addChunk (internal/streams/readable.js:309:12)
    at readableAddChunk (internal/streams/readable.js:284:9)
    at PassThrough.Readable.push (internal/streams/readable.js:223:10)
    at PassThrough.Transform.push (internal/streams/transform.js:166:32)
    at PassThrough.afterTransform (internal/streams/transform.js:101:10)
    at PassThrough._transform (internal/streams/passthrough.js:46:3)
    at PassThrough.Transform._read (internal/streams/transform.js:205:10).

我以前看到过这样的建议,即数据可以以多个块来激发,并将数据块推送到数组中,例如如下所示:

代码语言:javascript
复制
let chunks = [];
        stream.on('data', (dataChunk) => {
chunks.push(dataChunk);
        }).on('end',() => {
// combine chunks to create JSON object
})

但这也不起作用(可能是我的实现,但我不这么认为),现在我想这是否是twitter API中的一个错误,因为大多数tweet对象都是正确的。我应该注意,上面的streamTweets()函数是从异步函数调用的,我还想知道这是否与此有关。

还有其他人遇到过这个错误吗?或者有人知道我该怎么解决这个问题?理想情况下,我希望100%的推特正确地流。

提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2022-11-16 05:01:12

对于未来的读者来说,这个错误是由Twitter每20秒发送一次的心跳消息触发的。根据文件:

端点提供了20秒保持活动的心跳(它看起来像一个新的行字符)。

添加防止解析空字符串的防范措施将防止JSON解析错误。

代码语言:javascript
复制
if (data === "")
  return

空字符串是无效的JSON,因此发出错误。

现在,承认心跳存在,在指针请求中添加read_timeout = 20 * 1000可能是有益的,以避免没有数据的停滞程序,无论是由于本地网络中断或DNS失败等等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67115776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档