¿Cómo puedo hacer una solicitud HTTP desde Node.js o Express.js? Necesito conectarme a otro servicio. Espero que la llamada sea asíncrona y que la devolución de llamada contenga la respuesta del servidor remoto.
fuente
¿Cómo puedo hacer una solicitud HTTP desde Node.js o Express.js? Necesito conectarme a otro servicio. Espero que la llamada sea asíncrona y que la devolución de llamada contenga la respuesta del servidor remoto.
Aquí hay un fragmento de algún código de una muestra mía. Es asíncrono y devuelve un objeto JSON. Puede hacer cualquier tipo de solicitud GET.
Tenga en cuenta que hay formas más óptimas (solo una muestra), por ejemplo, en lugar de concatenar los fragmentos que coloca en una matriz y unirlos, etc. Esperemos que comience en la dirección correcta:
const http = require('http');
const https = require('https');
/**
* getJSON: RESTful GET request returning JSON object(s)
* @param options: http options object
* @param callback: callback to pass the results JSON object(s) back
*/
module.exports.getJSON = (options, onResult) => {
console.log('rest::getJSON');
const port = options.port == 443 ? https : http;
let output = '';
const req = port.request(options, (res) => {
console.log(`${options.host} : ${res.statusCode}`);
res.setEncoding('utf8');
res.on('data', (chunk) => {
output += chunk;
});
res.on('end', () => {
let obj = JSON.parse(output);
onResult(res.statusCode, obj);
});
});
req.on('error', (err) => {
// res.send('error: ' + err.message);
});
req.end();
};
Se llama creando un objeto de opciones como:
const options = {
host: 'somesite.com',
port: 443,
path: '/some/path',
method: 'GET',
headers: {
'Content-Type': 'application/json'
}
};
Y proporcionando una función de devolución de llamada.
Por ejemplo, en un servicio, requiero el módulo REST anterior y luego hago esto:
rest.getJSON(options, (statusCode, result) => {
// I could work with the resulting HTML/JSON here. I could also just return it
console.log(`onResult: (${statusCode})\n\n${JSON.stringify(result)}`);
res.statusCode = statusCode;
res.send(result);
});
Si está buscando async
/ await
(lineal, sin devolución de llamada), promesas, soporte de tiempo de compilación e inteligencia, creamos un cliente HTTP y REST liviano que se ajusta a esa factura:
Intente usar la
http.get(options, callback)
función simple en node.js:También hay una
http.request(options, callback)
función general que le permite especificar el método de solicitud y otros detalles de la solicitud.fuente
GET
solicitud si tengo esta URL?graph.facebook.com/debug_token? input_token={token-to-inspect} &access_token={app-token-or-admin-token}
?Request y Superagent son bibliotecas bastante buenas para usar.
nota: la solicitud está en desuso , ¡use bajo su responsabilidad!
Utilizando
request
:fuente
También puede usar Requestify , un cliente HTTP realmente genial y muy simple que escribí para nodeJS + que admite el almacenamiento en caché.
Simplemente haga lo siguiente para la solicitud del método GET:
fuente
Esta versión se basa en la función inicialmente propuesta por bryanmac que utiliza promesas, mejor manejo de errores y se reescribe en ES6.
Como resultado, no tiene que pasar una función de devolución de llamada, sino que getJSON () devuelve una promesa. En el siguiente ejemplo, la función se usa dentro de un controlador de ruta ExpressJS
En caso de error, delega el error en el servidor que maneja el middleware.
fuente
get
definición de ruta Express , de la que carecen muchas publicaciones aquí.Unirest es la mejor biblioteca que he encontrado para realizar solicitudes HTTP desde Node. Su objetivo es ser un marco multiplataforma, por lo que aprender cómo funciona en Node le servirá bien si necesita usar un cliente HTTP en Ruby, PHP, Java, Python, Objective C, .Net o Windows 8 también. Hasta donde puedo decir, las bibliotecas de inquietudes están respaldadas principalmente por clientes HTTP existentes (por ejemplo, en Java, el cliente Apache HTTP, en Node, la biblioteca de solicitud de Mikeal ): Unirest simplemente pone una API más agradable en la parte superior.
Aquí hay un par de ejemplos de código para Node.js:
Puedes saltar directamente a los documentos del Nodo aquí
fuente
Mira triturar . Es un cliente HTTP de nodo creado y mantenido por spire.io que maneja redirecciones, sesiones y respuestas JSON. Es ideal para interactuar con las API de descanso. Vea esta publicación de blog para más detalles.
fuente
Echa un vistazo a httpreq : es una biblioteca de nodos que creé porque estaba frustrado porque no había un módulo http GET o POST simple ;-)
fuente
Si solo necesita realizar solicitudes de obtención simples y no necesita soporte para ningún otro método HTTP, eche un vistazo a: simple-get :
fuente
Use reqclient : no está diseñado para fines de secuencias de comandos como
request
o muchas otras bibliotecas. Reqclient permite en el constructor especificar muchas configuraciones útiles cuando necesita reutilizar la misma configuración una y otra vez: URL base, encabezados, opciones de autenticación, opciones de registro, almacenamiento en caché, etc. También tiene características útiles como consulta y análisis de URL, codificación automática de consultas y Análisis JSON, etc.La mejor manera de usar la biblioteca es crear un módulo para exportar el objeto que apunta a la API y las configuraciones necesarias para conectarse con:
Módulo
client.js
:Y en los controladores donde necesita consumir el uso de API de esta manera:
reqclient
admite muchas características, pero tiene algunas que no son compatibles con otras bibliotecas: integración OAuth2 e integración de registrador con sintaxis cURL , y siempre devuelve objetos Promise nativos.fuente
Si alguna vez necesita enviar una
GET
solicitud a unIP
así como aDomain
(Otras respuestas no mencionaron que puede especificar unaport
variable), puede hacer uso de esta función:No se pierda requerir módulos en la parte superior de su archivo:
También tenga en cuenta que puede usar el
https
módulo para comunicarse a través de una red segura. entonces estas dos líneas cambiarían:fuente
fuente