Express.js调用Twitter API查询推文返回invalid json报错如何解决
问题排查及修复方案
核心错误点
- 接口请求方法错误:Twitter API v2 查询单条推文的接口要求使用 GET 请求,你的代码中使用了POST请求,直接触发权限拒绝,返回的错误文本开头为
Application cannot perform write actions,Unexpected token A的报错就是解析这段文本的首字符触发的。 - 未校验响应状态直接解析JSON:403错误返回的是纯文本错误提示,而非JSON格式,直接调用
res.json()会触发解析错误。 - 权限配置问题:返回状态码403 Forbidden说明你的请求未通过接口的权限校验。
权限校验排查项
- 确认你的
BEARER_TOKEN复制正确,无多余空格或遗漏字符。 - 登录Twitter开发者后台,确认你的应用已经开通
tweet.read权限,且所属的API套餐支持单条推文查询接口的调用。 - 确认你请求的tweet id对应推文为公开状态,私密账号的推文无法用应用级Bearer Token读取。
- 确认你当前的API调用额度未耗尽,免费套餐额度用完后也会返回403错误。
修正后的参考代码
router.post('/', async function(req, res, next) { try { const tweet_id = req.body.tweet_id; console.log(tweet_id); // 请求方法改为GET const response = await fetch(`https://api.twitter.com/2/tweets/${tweet_id}`, { method: 'GET', headers: { 'Authorization': `Bearer ${BEARER_TOKEN}`, } }); // 先校验响应状态再解析内容 if (!response.ok) { const errorText = await response.text(); console.log('接口请求错误:', response.status, errorText); res.render('index'); return; } const tweetData = await response.json(); console.log('查询结果:', tweetData); res.render('index'); } catch (err) { console.log('程序运行错误:', err); res.render('index'); } });
内容的提问来源于stack exchange,提问作者Timothy Pulliam
相关产品推荐
相关产品推荐

