如何使用用户input的关键字在Node.js中执行Twitter APIsearch

我是Node.js,Express和Angular的完全新手。 我在localhost上运行了一个Node / Express应用程序。 我正在尝试使用Twitter API将其转换为Twittersearch应用程序,以便我可以inputsearch词并且API返回此search词的search结果。 为此,我使用twitter包 。 在index.js ,我已经在X中填入了我的Twitter密钥和秘密,如下所示:

 var Twitter = require('twitter'); var client = new Twitter({ consumer_key: 'X', consumer_secret: 'X', access_token_key: 'X', access_token_secret: 'X' }); 

然后,当我把下面的代码放入index.js ,关键字“awesome”的search结果被logging到控制台:

 var tmpSearch = 'awesome'; client.get('search/tweets', {q: tmpSearch}, function(error, tweets, response){ if (error) throw error; console.log(tweets); }); 

这工作。 我的主页使用一个控制器myCtrl ,它确保当用户按下searchbutton(具有属性ng-click="search(searchTerm)" )时,input的search项被分配给variablessearchTerm(使用ng-model="searchTerm"作为input区域)。 控制器的代码如下所示:

 app.controller('myCtrl', ['$scope', function($scope){ $scope.search = function(searchTerm){ console.log("Searching for " + searchTerm); // Search here... console.log("Search finished."); }; } ]); 

它将search字词logging到控制台,但是我不知道如何从这里开始。 它说// Search here...我想执行上面的client.get代码,但是我不能在我的public/javascript.js使用来自routes/index.jsclientvariables。 我需要添加到我的代码才能执行search?

我感觉我并不了解Node / Express的一个非常重要的部分,但我不知道哪一部分是这样,所以我的解决scheme的search并不是很成功。 我从来没有使用过API,而且我花了好几个小时阅读Node.js和Twitter API的文档和教程,但仅仅在一个星期前,我开始学习它,所以大部分内容并没有做出对我来说还有很多意义。 我发现了几个使用GitHub上的Twitter API的Node应用程序的例子(其中大部分使用不同的包),其中我试图理解代码,但我无法弄清楚我该怎么做。 我希望有人能耐心向我解释我失踪的事情。

你需要考虑每一步发生的地方。 您正在显示的Twitter代码正在您的服务器上的Node中运行。 myCtrl代码是在浏览器中运行的AngularJS代码。 正如你感觉到的,有些东西缺less连接它们。

控制stream程将如下所示:

  • 用户键入一个术语并单击searchbutton
  • 你的控制器向你的Node.js发送一个HTTP请求
  • 你的Node.js服务器打电话给Twitter
  • Node.js把结果交给客户端(myCtrl)
  • 结果显示给你的用户

你有这件事的地方。 缺less的是HTTP请求和响应。 这是你做的:

  • 添加一个端点,比如/api/twittersearch 。 你会用Node.js和Express来做到这一点
  • 该端点的实现将是一个带参数reqres (请求和响应;这些名称不是必需的但频繁使用)的函数; 这个函数将会执行上面的new Twitterclient.get代码
  • client.get调用有一个callback函数,你现在已经实现了; 在你的callback中,你会发送推文回到客户端(像res.send(tweets)
  • 在你的控制器中,你的“在这里search”代码就像$http.get('/api/twittersearch?term=' + searchTerm)

最后一次调用$ http.get()返回一个Promise 。 您将使用.then(function(tweets){ ... }).catch(function(errors){ ... }) 。 在你传递给你的函数中,你将从你的调用中获得结果并更新你的模型。