5 способов делать HTTP-запросы в Node.js

Node.js

Углубленный анализ 5 методов инициирования HTTP-запросов в Node.js

Перевод: сумасшедший технический ботаник Английское название: 5 способов делать HTTP-запросы в Node.js Оригинальная ссылка:Ву Ву TW I Force O.com/blog/2017/0…

Создание HTTP-запросов — одна из основных функций современных языков программирования и один из первых приемов, с которыми сталкиваются многие программисты при переходе в новую среду разработки. В Node.js есть довольно много решений, как встроенных в язык, так и библиотек, предоставленных сообществом открытого исходного кода. Давайте рассмотрим некоторые из наиболее популярных методов.

В случае с этой статьей мы будем использовать «API ежедневных космических фотографий” в качестве JSON API для взаимодействия, Потому что космос — самая крутая вещь на свете.

Прежде чем начать, установите на свой компьютер последнюю версию node.js и npm.

HTTP — стандартная библиотека

Первый используется по умолчанию в стандартной библиотеке.HTTPмодуль. Этот модуль можно использовать без установки внешних зависимостей, поэтому он действительно готов к работе. Недостатком является то, что это не так удобно для пользователя по сравнению с другими решениями.

Приведенный ниже код отправит NASA APIGETЗапросите и выведите URL-адрес астрофотографии дня вместе с аннотациями:

const https = require('https');
 
https.get('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY', (resp) => {
  let data = '';
 
  // A chunk of data has been recieved.
  resp.on('data', (chunk) => {
    data += chunk;
  });
 
  // The whole response has been received. Print out the result.
  resp.on('end', () => {
    console.log(JSON.parse(data).explanation);
  });
 
}).on("error", (err) => {
  console.log("Error: " + err.message);
});

HTTPа такжеHTTPSБольшая часть функций, предоставляемых модулями, довольно ограничена. Вместо того, чтобы просто предоставить функцию обратного вызова для выполнения, как только все данные будут получены, вам нужно получить данные ответа в блоках. Если он в формате JSON, вам также необходимо выполнить синтаксический анализ вручную. Несмотря на то, что нагрузка невелика, все равно приходится выполнять некоторые ненужные операции.

Еще одна беда,HTTPа такжеHTTPSПротокол принадлежит двум модулям, поэтому, если мы используем APIHTTPSпротокол для связи, вам нужноHTTPSмодуль.

Если вы не хотите добавлять слишком много зависимостей в свою кодовую базу или хотите использовать ее базовые функции, для получения необходимых данных может потребоваться немного больше усилий, но это все равно отличный инструмент.

Request

Requestэто упрощенный http-клиент, который работает с PythonrequestБиблиотеки похожи. Эта библиотека лучше стандартнойhttpМодули проще в использовании, и в течение многих лет они были первым выбором для разработки сообществом открытого исходного кода.

Я использую Node.js с самого начала, и это очень помогает быстро выполнять задачи. а такжеhttpВ отличие от модуля, для его установки необходимо использовать npm.

Перейдите в каталог, в который вы хотите загрузить код, в терминале и выполните следующую команду:

npm install request@2.81.0

Как видите, вам не нужно писать слишком много кода для выполнения предыдущих функций:

const request = require('request');
 
request('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY', { json: true }, (err, res, body) => {
  if (err) { return console.log(err); }
  console.log(body.url);
  console.log(body.explanation);
});

Если вам нужна заноза в заднице для обработки HTTP-запросов обычным способом, то Request — хороший выбор. Вы также можете проверить библиотеку request-promise, если хотите использовать промисы.

Axios

Axiosосновывается наpromiseHTTP-клиент, который можно использовать в браузерах и Node.js. Использование промисов имеет большие преимущества при работе с кодом, который требует более сложной цепочки событий. Написание асинхронного кода может сбивать с толку, и промисы — одно из нескольких решений этой проблемы. Они даже используются в других языках, таких как Swift.

Чтобы установить Axios с помощью npm, введите в терминале следующую команду:

npm install axios@0.16.2

Код ниже делает то же самое, получая URL-адрес и интерпретируя астрономическую картину дня.

const axios = require('axios');
 
axios.get('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY')
  .then(response => {
    console.log(response.data.url);
    console.log(response.data.explanation);
  })
  .catch(error => {
    console.log(error);
  });

По умолчанию Axios может анализировать ответы JSON, что очень удобно. Вы также можете видеть, что обработка ошибок выполняется.catch()Готово, теперь мы все используем промисы.

Вы даже можете пройтиaxios.allЧтобы инициировать несколько одновременных запросов, например, если вы хотите получить астрономические изображения за два дня, вы можете сделать это:

var axios = require('axios');
 
axios.all([
  axios.get('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY&date=2017-08-03'),
  axios.get('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY&date=2017-08-02')
]).then(axios.spread((response1, response2) => {
  console.log(response1.data.url);
  console.log(response2.data.url);
})).catch(error => {
  console.log(error);
});

Асинхронный код может легко стать довольно сложным и непростым в обращении, и то, как он решает эту проблему, может облегчить вашу жизнь в долгосрочной перспективе. Axios легко решает эту проблему и может облегчить вашу работу по разработке в долгосрочной перспективе.

SuperAgent

Подобно Аксиосу,SuperAgent— еще одна популярная библиотека, в основном используемая для Ajax-запросов в браузере, а также для Node.js. Установите SuperAgent с помощью следующей команды:

npm install superagent@3.5.2

Самое классное в SuperAgent то, что он может связывать вызовы, вы можете связывать другие функции с чем-то вродеquery()По такому запросу и добавляются параметры. В предыдущих примерах мы добавляли их вручную. Обратите внимание, как SuperAgent обеспечивает эту функциональность:

const superagent = require('superagent');
 
superagent.get('https://api.nasa.gov/planetary/apod')
.query({ api_key: 'DEMO_KEY', date: '2017-08-02' })
.end((err, res) => {
  if (err) { return console.log(err); }
  console.log(res.body.url);
  console.log(res.body.explanation);
});

Как и в случае с axios, вам не нужно самостоятельно анализировать ответ JSON, что довольно круто.

Got

Если вы хотите использовать более легкую библиотеку, Got — еще один вариант. Его также можно использовать дляTwilio Functions.

Снова используйте npm для установки Got:

npm install got@7.1.0

Как и Axios, Got хорошо работает с Promises. Следующий код делает то же самое, что и предыдущий пример:

const got = require('got');
 
got('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY', { json: true }).then(response => {
  console.log(response.body.url);
  console.log(response.body.explanation);
}).catch(error => {
  console.log(error.response.body);
});

Если вам нужна облегченная библиотека, которая не такая раздутая, как Request, вам подойдет Go.

последние мысли

надне всеРешение, но вот вы знаете, как работает базовая функциональность в некоторых популярных библиотеках HTTP в Node.js. Есть также некоторые библиотеки, такие какnode-fetchПеренесите функции выборки браузера на серверную часть. Существуют различные подобные библиотеки на других языках для решения этой проблемы, напримерPythonа такжеRuby.

Оригинальный текст был впервые опубликован в публичном аккаунте: Jingcheng Yideng

Оригинальный адрес:Tickets.WeChat.QQ.com/Yes/PD HS4G8U7…