Как я могу сделать HTTP-запрос из Node.js или Express.js? Мне нужно подключиться к другому сервису. Я надеюсь, что вызов асинхронный и что обратный вызов содержит ответ удаленного сервера.
источник
Как я могу сделать HTTP-запрос из Node.js или Express.js? Мне нужно подключиться к другому сервису. Я надеюсь, что вызов асинхронный и что обратный вызов содержит ответ удаленного сервера.
Вот фрагмент кода из моего примера. Он асинхронный и возвращает объект JSON. Это может сделать любую форму запроса GET.
Обратите внимание, что есть более оптимальные способы (просто пример) - например, вместо объединения кусков, которые вы помещаете в массив, присоединяете его и т. Д. Надеемся, что это поможет вам начать работу в правильном направлении:
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();
};
Это вызывается созданием объекта параметров, например:
const options = {
host: 'somesite.com',
port: 443,
path: '/some/path',
method: 'GET',
headers: {
'Content-Type': 'application/json'
}
};
И предоставление функции обратного вызова.
Например, в сервисе мне требуется модуль REST выше, а затем сделать это:
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);
});
Если вы ищете async
/ await
(линейный, без обратного вызова), обещания, поддержку времени компиляции и intellisense, мы создали облегченный клиент HTTP и REST, который отвечает этим требованиям:
Попробуйте использовать простую
http.get(options, callback)
функцию в node.js:Существует также общая
http.request(options, callback)
функция, которая позволяет вам указать метод запроса и другие детали запроса.источник
GET
запрос, если у меня есть этот URL?graph.facebook.com/debug_token? input_token={token-to-inspect} &access_token={app-token-or-admin-token}
?Request и Superagent - довольно хорошие библиотеки для использования.
примечание: запрос устарел , используйте на свой страх и риск!
Использование
request
:источник
Вы также можете использовать Requestify , действительно классный и очень простой HTTP-клиент, который я написал для nodeJS +, он поддерживает кэширование.
Просто сделайте следующее для запроса метода GET:
источник
Эта версия основана на изначально предложенной функции bryanmac, которая использует обещания, улучшенную обработку ошибок и переписана в ES6.
В результате вам не нужно передавать функцию обратного вызова, вместо этого getJSON () возвращает обещание. В следующем примере функция используется внутри обработчика маршрута ExpressJS
При ошибке он делегирует ошибку промежуточному программному обеспечению обработки ошибок сервера.
источник
get
определении маршрута Express , которого во многих сообщениях здесь не хватает.Unirest - лучшая библиотека для поиска HTTP-запросов от Node. Он нацелен на создание многоплатформенного фреймворка, поэтому изучение того, как он работает на Node, хорошо вам пригодится, если вам потребуется использовать HTTP-клиент на Ruby, PHP, Java, Python, Objective C, .Net или Windows 8. Насколько я могу судить, самые неподходящие библиотеки в основном поддерживаются существующими HTTP-клиентами (например, на Java, HTTP-клиент Apache, на Node, в библиотеке запросов Mikeal ) - Unirest просто ставит лучший API на первое место.
Вот несколько примеров кода для Node.js:
Вы можете прыгнуть прямо к документам Node здесь
источник
Проверьте клочок . Это HTTP-клиент узла, созданный и поддерживаемый spire.io, который обрабатывает перенаправления, сеансы и ответы JSON. Отлично подходит для взаимодействия с остальными API. Смотрите этот блог для более подробной информации.
источник
Посмотрите httpreq : это библиотека узлов, которую я создал, потому что был разочарован тем, что не было простого модуля http GET или POST ;-)
источник
Если вам просто нужно сделать простые запросы get и вам не нужна поддержка других HTTP-методов, взгляните на: simple-get :
источник
Используйте reqclient : не предназначен для сценариев, как
request
и многие другие библиотеки. Reqclient позволяет в конструкторе указывать множество конфигураций, полезных, когда вам нужно снова и снова использовать одну и ту же конфигурацию: базовый URL, заголовки, параметры аутентификации, параметры ведения журнала, кэширование и т. Д. Также имеет полезные функции, такие как запрос и анализ URL, автоматическое кодирование и Анализ JSON и т. Д.Лучший способ использовать библиотеку - создать модуль для экспорта объекта, указывающего на API, и необходимых конфигураций для подключения:
Модуль
client.js
:И в контроллерах, где вам нужно использовать API, используйте это так:
reqclient
поддерживает множество функций, но есть некоторые, которые не поддерживаются другими библиотеками: интеграция OAuth2 и интеграция с логгерами с синтаксисом cURL , и всегда возвращает собственные объекты Promise.источник
Если вам когда-либо понадобится отправить
GET
запросIP
как a, так и aDomain
(в других ответах не упоминалось, что вы можете указатьport
переменную), вы можете использовать эту функцию:Не пропустите обязательные модули в верхней части вашего файла:
Также помните, что вы можете использовать
https
модуль для связи по защищенной сети. поэтому эти две строки изменились бы:источник
источник