NodeJS交互式Twitter机器人问题

时间:2017-02-03 21:34:55

标签: javascript node.js twitter

大家好我正在尝试创建一个可以根据用户需求获取和发布推文的交互式Twitter机器人。这是我到目前为止编写的代码......

console.log("The bot is starting...");
var Twit = require('twit');
var config = require('./config')
var prompt = require('prompt');
prompt.start()

var T = new Twit(config);

console.log("Bot is ready to roll!");
var tweet_terms = "";
var tweet_count = 0;
var tweet_command = 0;

console.log("Choose a command...\n1. Get tweets \n2. Post tweet");
prompt.get(['command'], function(err, result) {
    tweet_command = result.command
    if (tweet_command == 1) {
        console.log("You've chosen to get tweets.");
        console.log("Enter in terms you want to search for seperated by commas, \
        \nand also enter in the amount of tweets you want to receive back.");
        prompt.get(['terms', 'count'], function(err, result) {
            tweet_terms = result.terms;
            tweet_count = result.count;
        });
    }
});

var params = {
    q: tweet_terms,
    count: tweet_count
}

T.get('search/tweets', params, gotData);

function gotData(err, data, response) {
    var tweets = data.statuses;
    for (var i = 0; i < tweets.length; i++) {
        console.log(tweets[i].text);
    }
}

我正在尝试询问用户有关搜索条件和要收集的推文数量的输入。但是,即使提示用户输入,我的程序也会停止。以下是程序的执行方式..

The bot is starting... Bot is ready to roll! Choose a command... 1. Get tweets 2. Post tweet prompt: command: C:\Users\Kevin\Desktop\MERN Tutorials\Twit Twitter Bot\bot.js:42 for (var i = 0; i < tweets.length; i++) {

看起来我的gotData函数导致了这个问题,但我并不清楚为什么我的程序以这种方式执行。我的提示甚至不允许用户输入。

TypeError: Cannot read property 'length' of undefined at gotData (C:\Users\X\Desktop\MERN Tutorials\Twit Twitter Bot\bot.js:42:31)

我不明白为什么在处理用户输入之前甚至调用了这个函数..我是NodeJS的新手,我很困惑为什么这样做。

非常感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

这一行:

T.get('search/tweets', params, gotData);
应用程序运行后,

立即被称为 。完成后,您运行一堆似乎正在提示响应的console.log()。在用户输入他们的选择之后,你不想运行这个,否则你怎么知道params?)。

get电话移到内,回复上次提示:

prompt.get(['command'], function(err, result) {
    tweet_command = result.command
    if (tweet_command == 1) {
        console.log("You've chosen to get tweets.");
        console.log("Enter in terms you want to search for seperated by commas, \
        \nand also enter in the amount of tweets you want to receive back.");
        prompt.get(['terms', 'count'], function(err, result) {
            tweet_terms = result.terms;
            tweet_count = result.count;
            T.get('search/tweets', params, gotData);
            // ^ here!
        });
    } else {
        // post a tweet code goes here
    }
});

现在,虽然这有效,但它并不是特别灵活。您可以将整个事情重写一点,以便您可以从用户检索所有输入,然后将它们作为参数传递给单个处理函数。