使用Node.js轮询REST服务
我正在开发一项服务,该服务将每隔一分钟左右对Foursquare的某些签入进行轮询,并将结果保存/更新到NoSQL数据库中。使用setInterval包装http.request,然后使用数据事件发射器聚合分块响应的最佳方法是什么?我计划使用终端发射器解析JSON,并在请求完成时推入NoSQL DB。想法?当我遇到类似的问题时,我采用了类似的技术,效果很好。希望这会有所帮助。可能有更好的方法,但我最终只是使用事件发射器来处理REST响应,如下所示:使用Node.js轮询REST服务,node.js,Node.js,我正在开发一项服务,该服务将每隔一分钟左右对Foursquare的某些签入进行轮询,并将结果保存/更新到NoSQL数据库中。使用setInterval包装http.request,然后使用数据事件发射器聚合分块响应的最佳方法是什么?我计划使用终端发射器解析JSON,并在请求完成时推入NoSQL DB。想法?当我遇到类似的问题时,我采用了类似的技术,效果很好。希望这会有所帮助。可能有更好的方法,但我最终只是使用事件发射器来处理REST响应,如下所示: var fourSquareGet = {
var fourSquareGet = {
host: 'api.foursquare.com',
port: 443,
path: '/v2/venues/search?ll=33.88,-119.19&query=burger*',
method: 'GET'
};
setInterval(function () {
var reqGet = https.request(fourSquareGet, function (res) {
var content;
res.on('data', function (chunk) {
content += chunk;
});
res.on('end', function () {
// remove 'undefined that appears before JSON for some reason
content = JSON.parse(content.substring(9, content.length));
db.checkins.save(content.response.venues, function (err, saved) {
if (err || !saved) throw err;
});
console.info("\nSaved from Foursquare\n");
});
});
reqGet.end();
reqGet.on('error', function (e) {
console.error(e);
});
}, 25000);
然而,我不确定为什么要从我从foursquare收到的JSON中解析出“未定义” 我已通过@occasl修正了答案,并为清晰起见进行了更新:
var https = require('https');
setInterval(function () {
var rest_options = {
host: 'api.example.com',
port: 443,
path: '/endpoint',
method: 'GET'
};
var request = https.request(rest_options, function(response) {
var content = "";
// Handle data chunks
response.on('data', function(chunk) {
content += chunk;
});
// Once we're done streaming the response, parse it as json.
response.on('end', function() {
var data = JSON.parse(content);
//TODO: Do something with `data`.
});
});
// Report errors
request.on('error', function(error) {
console.log("Error while calling endpoint.", error);
});
request.end();
}, 5000);
Thx…我想我看过同一篇文章,但它似乎有点旧。你必须解析出“未定义”的原因是你从未初始化
内容。如果不是“var content”,而是“var content=”;则不需要删除任何内容。(当您将字符串“foo”添加到“undefined”时,它将为您提供字符串“undefinedfoo”。)感谢您添加该字符串。我最终做了相同的事情,但我想我从未在此处更新过它。请随意编辑我的答案。对于将来,只需编辑我的答案,我将接受您的更改。没有问题。