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

标签 jquery ajax node.js express heroku

我正在构建一个搜索引擎,在客户端发布搜索字符串后在服务器端查询 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 网络应用程序,它从主页上的客户端表单 POST (index.ejs) 获取搜索字符串。然后服务器将呈现结果页面 (results.ejs),其中包含 wiki 和 twitter 搜索结果。 Twitter API 搜索已使用 BoyCook's TwitterJSClient 处理.

我想知道从我的服务器执行此精确 查询的最佳方式。我一直在环顾四周,找不到简洁的答案。有人对此有什么建议吗?

最佳答案

这是我根据 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 变量。

关于jquery - 在 Node.js 中实现 AJAX 请求服务器端的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32938344/

相关文章:

javascript - Rails渲染JS部分打印代码到页面

javascript - typescript /Knex : Cannot use import statement outside a module

javascript - JQuery/Javascript 或其他方式静默仅打印一次

javascript - 检查单击的元素类型

javascript - 通过 AJAX 获取 Javascript

ajax - Node 请求,cheerio - 如何处理额外的 ajax 负载

jquery - 使用 html2canvas 更改背景无法正常工作

调用函数时,JavaScript 变量未在 onclick 按钮上定义

node.js - 在服务器上处理 react 路由的正确方法?

node.js - 在 MEAN 堆栈中创建搜索文章功能