无需Express:Node.js开发Twitter机器人时如何发布Reddit内容
不用Express,如何将Reddit数据填入Twitter发布请求?
嘿,你现在的核心问题是没处理好异步代码的执行顺序!axios请求Reddit数据是异步操作,而你把Twitter的发布代码写在了.then()外面,这时候redditdata还没被赋值,自然没法正确拿到标题和URL。不用Express完全没问题,因为这个脚本只是做数据抓取和发布,不需要处理HTTP请求,直接调整代码的执行顺序就行。
修改后的完整代码:
// imports var Twit = require('twit'); var config = require('./config'); var axios = require('axios'); // 先获取Reddit数据,拿到数据后再执行Twitter发布 axios.get('https://api.reddit.com/r/worldnews/hot.json?', { params: { sort: 'hot', limit: 1 } }) .then(response => { var redditdata = response.data; // 注意Reddit返回的children是数组,要取第一个元素 const post = redditdata.data.children[0].data; const tweetContent = `${post.title} ${post.url}`; // 在这里调用Twit的post方法,确保数据已经拿到 var T = new Twit(config); T.post('statuses/update', { status: tweetContent }, function(err, data, response) { if (err) { console.error('发布失败:', err); return; } console.log('发布成功:', data); }); }) .catch(err => { console.error('获取Reddit数据失败:', err); });
关键说明:
- 异步顺序调整:把Twitter的发布逻辑移到axios的
.then()回调内部,这样只有当Reddit数据成功返回后,才会执行发布操作。 - 数据结构修正:Reddit返回的
children是一个数组(哪怕你设置了limit=1),所以必须用[0]取出第一个元素,再访问里面的data.title和data.url。 - 错误处理:添加了
.catch()捕获Reddit请求失败的情况,以及发布时的错误判断,方便排查问题。
这样你的脚本就能独立运行,完全不需要Express服务器啦~
内容的提问来源于stack exchange,提问作者Keegan
相关产品推荐
相关产品推荐

