Найти в Дзене
Funny IT

Http запросы в Node.js

Многие разработчики сталкиваются с асинхронными запросами со стороны клиента. Браузерный JavaScript позволяет очень легко делать такие запросы с помощью XmlHttpRequest или, построенный на промисах, fetch. Также существует бесчисленное множество библиотек и фреймворков, предоставляющих удобные обертки для данной задачи. Но что же делать, если необходимо на стороне сервера воспользоваться API сторонних сайтов или загрузить файл. Для этих случев существует несколько замечательных фич. 1. Сперва нужно попробовать модуль, предоставленный стандартной библиотекой, https: const https = require('https'); https.get('https://www.site.com', res => { let data = ''; res.on('data', chunk => { data += chunk; }); res.on('end', () => { console.log(data); }); }); Здесь функция get принимает url ресурса и callback, в котором объявляются обработчики событий data и end. Также в модуле https имеется более гибкая функция https.request(options[, callback]). Первым параметром она принимает объект optio

Многие разработчики сталкиваются с асинхронными запросами со стороны клиента. Браузерный JavaScript позволяет очень легко делать такие запросы с помощью XmlHttpRequest или, построенный на промисах, fetch. Также существует бесчисленное множество библиотек и фреймворков, предоставляющих удобные обертки для данной задачи. Но что же делать, если необходимо на стороне сервера воспользоваться API сторонних сайтов или загрузить файл. Для этих случев существует несколько замечательных фич.

1. Сперва нужно попробовать модуль, предоставленный стандартной библиотекой, https:

const https = require('https');
https.get('https://www.site.com', res => {
let data = '';
res.on('data', chunk => {
data += chunk;
});
res.on('end', () => {
console.log(data);
});
});

Здесь функция get принимает url ресурса и callback, в котором объявляются обработчики событий data и end. Также в модуле https имеется более гибкая функция https.request(options[, callback]). Первым параметром она принимает объект options, где можно обозначить имя хоста, порт, метод и т.п.

2. Рассмотрим использования модуля request:

const request = require('request');
request('https://www.site.com', (err, res, body) => {
console.log(res.statusCode); // код состояния
console.log(res.headers['content-type']); // тип контента
console.log(res.request.method); // метод
console.log(res.request.host); // имя хоста
console.log(body); // тело ответа
});

Установить его можно с помощью команды: ~$ npm i request. Как видим сделать get-запрос с его помощью проще простого. Если мы хотим загрузить изображение в нашу файловую систему, мы можем сделать get-запрос и с помощью канала перенаправить в поток записи:

const request = require('request');
const fs = require('fs');
request('https://www.site.com/image.png').pipe(fs.createWriteStream('image.png'));

Следующий пример демонстрирует post-запрос:

request.post('https://www.site.com/handler').form({key: 'value'});

3. Последний вариант подойдет для любителей промисов. Это модуль axios. Устанавливается он проще простого: ~$ npm i axios.

const axios = require('axios');
axios.get('https://www.site.com')
.then(res => {
console.log(res.headers['content-type']);
console.log(res.data);
})
.catch(err => {
console.log(err);
});

Более того вы можете делать цепочки из вызовов:

axios.all([
axios.get('https://www.site.com'),
axios.get('https://www.site2.com')
]).then(axios.spread((res1, res2) => {
console.log(res1.data);
console.log(res2.data);
})).catch(err => {
console.log(err);
});

Выглядит и работает очень круто!

Спасибо за внимание! Надеюсь, эта статья оказалась полезна!