在Node.js中实现AJAX请求服务器端的正确方法

我正在构建一个搜索引擎,在客户端POST搜索字符串后查询Twitter和Wiki API服务器端。 当我仍然完全在客户端时,对Wiki API的AJAX请求看起来像:

$.ajax({ url: 'https://en.wikipedia.org/w/api.php', data: { action: 'query', list: 'search', srsearch: searchString, // variable pulled from input format: 'json', //origin: 'https://www.mediawiki.org' }, xhrFields: { withCredentials: true }, dataType: 'jsonp' // will probably use 'json' now that I'm server-side }).done( function ( data ) { searchParser(data); }); ... //searchParser() below 

现在,我已经实现了一个Node.js Web应用程序,该应用程序从主页上的客户端表单POST( index.ejs )获取搜索字符串。 然后,服务器将使用wiki和twitter搜索结果呈现结果页面( results.ejs )。 Twitter API搜索已经通过BoyCook的TwitterJSClient处理。

我想知道从我的服务器执行这个确切查询的最佳方法。 我一直在环顾四周,找不到简洁的答案。 有没有人对此有任何建议?

以下是我根据Jonathan的回复提出的解决方案:

 function wikiSearch () { var query = querystring.stringify({ action: 'query', list: 'search', srsearch: searchString, srlimit: 10, srwhat: 'text', format: 'json' }); var options = { hostname: 'en.wikipedia.org', path: '/w/api.php?' + query }; var req = https.request(options, function(res) { if (!res) { wikiData = "An error occured!"; complete(); }; var body = ''; console.log("statusCode: ", res.statusCode); res.setEncoding('utf8'); res.on('data', function(data) { body += data; }); res.on('end', function() { wikiData = wikiDataParser( JSON.parse(body) ); complete(); }); }); req.end(); req.on('error', function (err) { wikiData = "

MediaWiki API is currently down.

"; complete(); }) }; ... // complete() is below

这会根据请求或响应更改wikiData变量。

了解MEAN堆栈。 对于初学者来说,通常有人建立了一个你将用NPM安装的模块,它可以简化与api的连接。 您可以手动执行此操作,但如果node.js的官方发行版可用,则没有意义:

 npm install twitter 

下面是你的主要快递app文件。 例如,它被简化了。

 //include this....loads the twitter client api app...will make this a breeze var Twitter = require('twitter'); //your access keys and info to login into the api....fill them. var client = new Twitter({ consumer_key: '', consumer_secret: '', access_token_key: '', access_token_secret: '' }); //the below code executes when you hit this path app.post('/getTweetsYo', function (res, req, data) { // gets username from ajax post of user data....access via req.data. Passes it to twitter api request var params = {screen_name: req.data.username }; client.get('statuses/user_timeline', params, function(error, tweets, response){ if (!error) { console.log(tweets); // sending the tweets back to the front end! res.send(tweets); } });