Como posso fazer uma solicitação HTTP no Node.js ou no Express.js? Preciso me conectar a outro serviço. Espero que a chamada seja assíncrona e que o retorno de chamada contenha a resposta do servidor remoto.
fonte
Como posso fazer uma solicitação HTTP no Node.js ou no Express.js? Preciso me conectar a outro serviço. Espero que a chamada seja assíncrona e que o retorno de chamada contenha a resposta do servidor remoto.
Aqui está um trecho de algum código de uma amostra minha. É assíncrono e retorna um objeto JSON. Pode fazer qualquer forma de solicitação GET.
Observe que existem maneiras mais ótimas (apenas uma amostra) - por exemplo, em vez de concatenar os pedaços que você coloca em uma matriz e junta-se a ela etc ... Esperemos que você comece na direção certa:
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();
};
É chamado criando um objeto de opções como:
const options = {
host: 'somesite.com',
port: 443,
path: '/some/path',
method: 'GET',
headers: {
'Content-Type': 'application/json'
}
};
E fornecendo uma função de retorno de chamada.
Por exemplo, em um serviço, eu preciso do módulo REST acima e faça o seguinte:
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);
});
Se você está procurando async
/ await
(linear, sem retorno de chamada), promessas, suporte a tempo de compilação e intellisense, criamos um cliente HTTP e REST leve que se encaixa nessa conta:
Tente usar a
http.get(options, callback)
função simples no node.js:Há também uma
http.request(options, callback)
função geral que permite especificar o método de solicitação e outros detalhes da solicitação.fonte
GET
solicitação se tiver este URL?graph.facebook.com/debug_token? input_token={token-to-inspect} &access_token={app-token-or-admin-token}
?Solicitação e Superagente são boas bibliotecas para usar.
nota: a solicitação foi descontinuada , use por sua conta e risco!
Usando
request
:fonte
Você também pode usar o Requestify , um cliente HTTP muito legal e muito simples que escrevi para o nodeJS +, que suporta cache.
Basta fazer o seguinte para a solicitação do método GET:
fonte
Esta versão é baseada na função inicialmente proposta pela bryanmac , que usa promessas, melhor tratamento de erros e é reescrita no ES6.
Como resultado, você não precisa passar em uma função de retorno de chamada, mas getJSON () retorna uma promessa. No exemplo a seguir, a função é usada dentro de um manipulador de rota ExpressJS
Em caso de erro, ele delega o erro para o erro do servidor que trata do middleware.
fonte
get
definição de rota Express , que falta muitas postagens aqui.O Unirest é a melhor biblioteca que encontrei para fazer solicitações HTTP do Node. Seu objetivo é ser uma estrutura multiplataforma, portanto, aprender como funciona no Node será útil se você precisar usar um cliente HTTP em Ruby, PHP, Java, Python, Objetivo C, .Net ou Windows 8 também. Tanto quanto posso dizer, as bibliotecas unirest são apoiadas principalmente por clientes HTTP existentes (por exemplo, em Java, o cliente HTTP Apache, no Node, a biblioteca Request do Mikeal ) - o Unirest apenas coloca uma API mais agradável no topo.
Aqui estão alguns exemplos de código para o Node.js:
Você pode pular diretamente para os documentos do Node aqui
fonte
Confira o fragmento . É um cliente HTTP de nó criado e mantido pelo spire.io que lida com redirecionamentos, sessões e respostas JSON. É ótimo para interagir com as APIs restantes. Veja esta postagem no blog para mais detalhes.
fonte
Confira o enablepreq : é uma biblioteca de nós que criei porque estava frustrada porque não havia um módulo http GET ou POST simples ;-)
fonte
Se você só precisa fazer solicitações get simples e não precisa de suporte para outros métodos HTTP, consulte: simple-get :
fonte
Use reqclient : não projetado para fins de script como
request
ou muitas outras bibliotecas. O Reqclient permite que o construtor especifique muitas configurações úteis quando você precisar reutilizar a mesma configuração repetidamente: URL base, cabeçalhos, opções de autenticação, opções de log, armazenamento em cache, etc. Também possui recursos úteis como consulta e análise de URL, codificação automática de consulta e Análise JSON etc.A melhor maneira de usar a biblioteca é criar um módulo para exportar o objeto apontando para a API e as configurações necessárias para se conectar com:
Módulo
client.js
:E nos controladores em que você precisa consumir a API, use assim:
reqclient
suporta muitos recursos, mas há alguns que não são suportados por outras bibliotecas: integração do OAuth2 e integração do criador de logs com a sintaxe cURL e sempre retorna objetos nativos do Promise.fonte
Se você precisar enviar uma
GET
solicitação a umaIP
e também aDomain
(Outras respostas não mencionaram que você pode especificar umaport
variável), você poderá fazer uso desta função:Não perca a exigência de módulos na parte superior do seu arquivo:
Lembre-se também de que você pode usar o
https
módulo para se comunicar pela rede segura. então essas duas linhas mudariam:fonte
fonte