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

时间:2015-10-04 20:59:16

标签: jquery ajax node.js express heroku

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

'<p><label for="id_business_name">Business name:</label> <input id="id_business_name" maxlength="100" name="business_name" type="text" /></p>'

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

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

2 个答案:

答案 0 :(得分:1)

以下是基于Jonathan's回复的解决方案:

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 = "<h2>MediaWiki API is currently down.</h2>";
        complete();
    })

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

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

答案 1 :(得分:0)

了解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);

          }
    });