Estoy trabajando en un servicio que sondearía Foursquare para realizar comprobaciones cada minuto o así y guardar/actualizar los resultados en una base de datos NoSQL. ¿Es el mejor enfoque para ajustar una http.request con setInterval y luego agregar la respuesta fragmentada utilizando el emisor de eventos de datos? Planeo usar el emisor final para analizar el JSON e insertarlo en un DB NoSQL cuando la solicitud esté completa. ¿Pensamientos?Servicio REST de sondeo con Node.js
Respuesta
Puede haber mejores maneras, pero acabé utilizando emisores de eventos para procesar la respuesta RESTO de la siguiente manera:
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);
Sin embargo, no estoy seguro de por qué tenía omita "indefinido" de la JSON que recibí de foursquare.
Cuando me encontré con un problema similar, empleé una técnica similar y funcionó bien. Here's where I got the idea from. Espero que esto ayude un poco.
Thx ... creo que miraba el mismo artículo pero parecía un poco viejo. – occasl
he fijado por la respuesta @occasl, y actualizados para mayor claridad:
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);
Para el futuro, simplemente edite mi respuesta y aceptaré sus cambios sin ningún problema. – occasl
- 1. Opciones largas de sondeo: Nginx, PHP, Node.js
- 2. Node.js Rest Framework
- 3. Creación de un servicio REST con C#
- 4. Servicio RMI vs REST
- 5. Servicio web Java ASYnc REST con Jersey?
- 6. ¿Servicio web REST WSDL?
- 7. sondeo de servidor con JavaScript
- 8. ¿Evita el sondeo constante de iPhone de un servicio web?
- 9. ¿Consumo de servicio REST con WCF - Parámetros de Querystring opcionales?
- 10. Método de autenticación para el servicio web REST con SecurityContext
- 11. Problema con POST JSON en un servicio REST de Jersey
- 12. sondeo Silverlight dúplex con HTTPS
- 13. una imagen de un servicio WCF REST
- 14. Devolver objeto JSON del servicio web REST con objetos complejos
- 15. Posible crear un servicio web REST con ASP.NET 2.0
- 16. Contraseña que protege un servicio REST?
- 17. Sondeo de una colección con Backbone.js
- 18. servicio web REST en python 3?
- 19. Servicio WCF REST autohospedado y autenticación básica
- 20. jQuery ajax llame al servicio REST
- 21. ¿Devuelve verdadero/falso en el servicio REST?
- 22. Servicio WCF REST y SOAP sin WebServiceHostFactory
- 23. Enviando información confidencial al servicio REST
- 24. Jersey REST servicio como Spring Component
- 25. WCF REST Servicio no visible en WCFTestClient
- 26. WCF REST Servicio JSON Publicar datos
- 27. prueba REST JSON servicio web Grails
- 28. GET/POST al servicio web REST
- 29. WCF REST Servicio: InstanceContextMode.PerCall no funciona
- 30. Transacción en el servicio REST WCF
La razón por la que tiene que analizar 'indefinido' es porque nunca inicializó 'content'. Si, en lugar de "var content"; tienes "var content = '';" no necesitas desnudar nada (Cuando agrega una cadena 'foo' a 'indefinido', le da la cadena "undefinedfoo '.) –
Gracias por agregar eso. Terminé haciendo lo mismo, pero supongo que nunca lo actualicé aquí. No dude en editarlo mi respuesta. – occasl