Estoy intentando hacer llamadas del lado del servidor a API relajadas usando node.js. Las devoluciones con JSONP (contenedor JSON dentro de una función JS) devuelven errores que parecen estar en el corazón de la API del nodo http.get (opciones, devolución de llamada). ¿Puede el nodo o cualquier módulo devolver el objeto JSON de un retorno JSONP?Requerimiento de la solicitud HTTP del nodo para las API tranquilas que devuelven JSONP
solicitudRespuesta
me gustaría escribir una función de contenedor que comprueba JSON y despoja a la función de la cadena devuelta sólo para evitar correr eval. Luego JSON.parse en la cadena (ahora menos la función desde que lo quitamos) para devolver json.
var request = require('request');
var getJsonFromJsonP = function (url, callback) {
request(url, function (error, response, body) {
if (!error && response.statusCode == 200) {
var jsonpData = body;
var json;
//if you don't know for sure that you are getting jsonp, then i'd do something like this
try
{
json = JSON.parse(jsonpData);
}
catch(e)
{
var startPos = jsonpData.indexOf('({');
var endPos = jsonpData.indexOf('})');
var jsonString = jsonpData.substring(startPos+1, endPos+1);
json = JSON.parse(jsonString);
}
callback(null, json);
} else {
callback(error);
}
})
}
Entonces usarlo de esta manera:
getJsonFromJsonP('http://www.linkedin.com/countserv/count/share?url=http://techcrunch.com/2012/01/29/turning-two-founderscard-pulls-back-the-curtain-on-its-membership-community-for-entrepreneurs/', function (err, data) {
console.log('data count', data.count);
});
Ejecutar la devolución de llamada con vm
JavaScript code can be compiled and run immediately or compiled, saved, and run later
Una respuesta anterior sugiere la creación de bandas de la función de devolución de llamada. Desafortunadamente, esto no es compatible con muchas respuestas de jsonp ya que los contenidos de la función suelen ser objetos y no JSON puro. La función JSON.parse() a morir por algo como el siguiente:
callback({key:"value"});
Aunque lo anterior es un objeto válido, no es JSON válida.
A continuación se ejecutará la devolución de llamada y devolver el objeto:
jsonpSandbox = vm.createContext({callback: function(r){return r;}});
myObject = vm.runInContext(jsonpData,jsonpSandbox);
Al crear el cambio de contexto callback
al nombre de la función de devolución de llamada que se devuelve en la respuesta jsonp.
briliant. Funciona a la perfección. –
- 1. Modificar encabezados HTTP para una solicitud JSONP
- 2. HTTPS a HTTP solicitud JSONP
- 3. ¿Es posible hacer una solicitud JSONP de HTTPS a HTTP?
- 4. Rutas tranquilas y Django
- 5. para una solicitud HTTP
- 6. ¿La URL de solicitud HTTP no forma parte del encabezado de solicitud HTTP?
- 7. GitHub jsonp código fuente api
- 8. longitud máxima de la solicitud HTTP GET?
- 9. Confundido en cómo funciona una solicitud JSONP
- 10. cómo matar una solicitud jsonp anterior?
- 11. Convención de nomenclatura de solicitud HTTP de API web
- 12. solicitud JSONP error de regresar: "SyntaxError no detectada: símbolo inesperado:"
- 13. Node.js http solicitud pipelining
- 14. Controlador para agregar encabezados HTTP a la solicitud HTTP no invocada al utilizar la API de cliente de Axis
- 15. cliente de prueba Django http autenticación básica para la solicitud
- 16. La página no muestra la fuente hasta que se devuelven las solicitudes de la API de Google Font
- 17. Realización y manejo de solicitud JSONP mediante JavaScript
- 18. Cómo enviar una solicitud http en la aplicación Android para acceder a la API REST
- 19. ¿Dónde están las constantes del método de solicitud en la API del servlet?
- 20. Cómo puedo decirle a las especificaciones del controlador que utilicen la solicitud firmada de OAuth
- 21. hay un requerimiento para json en node.js
- 22. Obtener las coordenadas de la dirección de Google Maps API por ajax() solicitud
- 23. Detección del lado del cliente del método de solicitud HTTP
- 24. Tratamiento de errores HTTP 4nn/5nn del lado del servidor que devuelven un documento HTML completo en las solicitudes ajax de jQuery
- 25. Anulando la solicitud JQuery JSONP lanzará el error
- 26. Cuál es la respuesta HTTP adecuada para enviar para las solicitudes que requieren SSL/TLS
- 27. ¿Por qué "las propiedades que devuelven matrices son propensas a las ineficiencias del código"?
- 28. Recepción de datos json de la solicitud http
- 29. ¡Falló la solicitud HTTP! HTTP/1.1 505 HTTP Version No admitido error
- 30. Http Opción Método con solicitud de Javascript
¿Puedes encontrar el código? Me di cuenta de que no hay referencia de devolución de llamada en la url. Usualmente esto se ve como & callback = foo o & jsonp = bar. Parece que LinkedIn responde a la devolución de llamada. A continuación, puede usar url.parse para encontrar ese parámetro y actuar en consecuencia. – booyaa
request = require ('request'); request ({uri: 'http://graph.facebook.com/?ids=http://appsumo.com'}, function (err, responser, body) {myObject = eval ('(' + body + ')) '); }; – user690740
El parámetro de devolución de llamada (& callback = nombreFunción) con linkedin me permite cambiar la función contenedora a cualquier nombre que desee (pero no eliminarlo todo junto). Si pudiera obtener una respuesta válida (JSON o JSONP) desde y el módulo o la solicitud HTTP API con JS en Node. Sería un hombre feliz. – user690740