我正在构建一个搜索引擎,在客户端发布搜索字符串后在服务器端查询 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/