Статья Совершенствуйте свою игру в веб-разработке: научитесь писать HTTP-запросы на JavaScript была впервые опубликована во вторник, 3 января 2023 г., в Блоге технических разработчиков. Для получения новейшего актуального контента, только что из печи, посетите https://techdevblog.io и подпишитесь на нашу рассылку!

HTTP-запросы — неотъемлемая часть веб-разработки, и возможность писать их на JavaScript имеет важное значение для любого начинающего разработчика интерфейса или бэкенда. В этой статье мы расскажем, как писать HTTP-запросы на JavaScript как в браузере, так и в Node.js, как с использованием библиотек, так и без них.

HTTP-запросы в браузере

В браузере есть два основных способа выполнения HTTP-запросов: с помощью объекта XMLHttpRequest или с помощью fetch API.

XMLHttpRequest

Объект XMLHttpRequest существует уже давно и поддерживается всеми современными браузерами. Он позволяет отправлять HTTP-запросы на сервер и получать ответ. Вот пример того, как использовать XMLHttpRequest для отправки запроса GET на сервер для получения некоторых данных:

const xhr = new XMLHttpRequest();

xhr.open('GET', '/data');
xhr.send();

xhr.onload = function() {
  if (xhr.status === 200) {
    console.log(xhr.response);
  }
};

В этом примере мы сначала создаем новый объект XMLHttpRequest, а затем вызываем метод open, чтобы указать тип запроса (GET) и URL-адрес для отправки запроса. Затем вызывается метод send для отправки запроса.

Наконец, мы настроили обработчик событий onload, который будет вызываться при завершении запроса. В обработчике мы проверяем свойство status объекта XMLHttpRequest, чтобы убедиться, что запрос был успешным (статус 200 указывает на успех), а затем записываем данные ответа в консоль.

Вы также можете использовать XMLHttpRequest для отправки POST-запросов и других типов HTTP-запросов. Вот пример того, как отправить запрос POST:

const xhr = new XMLHttpRequest();

xhr.open('POST', '/data');
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(JSON.stringify({ name: 'John', age: 30 }));

xhr.onload = function() {
  if (xhr.status === 200) {
    console.log(xhr.response);
  }
};

В этом примере мы сначала создаем новый объект XMLHttpRequest, а затем вызываем метод open, чтобы указать тип запроса (POST) и URL-адрес для отправки запроса. Затем мы устанавливаем для заголовка запроса Content-Type значение application/json, чтобы указать, что мы отправляем данные JSON в теле запроса. Наконец, мы вызываем метод send и передаем ему строковую версию объекта, содержащего данные, которые мы хотим отправить.

Получить API

fetch API — это новый способ выполнения HTTP-запросов, поддерживаемый всеми современными браузерами. Он использует обещания, чтобы упростить работу с асинхронными запросами. Вот пример того, как использовать fetch для отправки запроса GET на сервер для получения некоторых данных:

fetch('/data')
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));

В этом примере мы вызываем функцию fetch и передаем ей URL-адрес, на который мы хотим отправить запрос. Функция fetch возвращает обещание, которое разрешается с ответом сервера.

Мы связываем вызов метода then с обещанием, возвращенным fetch, и в функции обратного вызова мы вызываем метод json для объекта ответа, чтобы проанализировать ответ как JSON. Мы связываем еще один вызов метода then с промисом, возвращенным методом json, и в этой функции обратного вызова мы записываем данные в консоль.

Если в какой-то момент произойдет ошибка, она будет обнаружена методом catch, который выведет ошибку на консоль.

Вы также можете использовать fetch API для отправки POST-запросов и других типов HTTP-запросов. Вот пример того, как отправить запрос POST:

fetch('/data', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({ name: 'John', age: 30 })
})
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));

В этом примере мы вызываем функцию fetch и передаем ей URL-адрес, на который мы хотим отправить запрос, а также объект параметров. В объекте параметров мы указываем method как «POST», headers как объект, содержащий заголовок запроса Content-Type, установленный в «application/json», и body как строковую версию объекта, содержащего данные, которые мы хотим отправить.

HTTP-запросы в Node.js

В Node.js есть несколько способов выполнения HTTP-запросов.

Модуль Node.js http

Одним из самых популярных является модуль http, встроенный в Node.js. Вот пример того, как использовать модуль http для отправки запроса GET на сервер для получения некоторых данных:

const http = require('http');

http.get('/data', res => {
  res.setEncoding('utf8');
  let data = '';
  res.on('data', chunk => {
    data += chunk;
  });
  res.on('end', () => {
    console.log(data);
  });
});

В этом примере нам требуется модуль http, а затем вызывается метод get, передавая ему URL-адрес, на который мы хотим отправить запрос, и функцию обратного вызова, которая будет вызываться при получении ответа.

В функции обратного вызова мы устанавливаем кодировку ответа «utf8» и создаем переменную для хранения данных ответа. Затем мы настраиваем прослушиватель событий для события «данные», которое генерируется при получении порции данных. В обработчике события мы добавляем порцию данных к переменной data.

Наконец, мы настраиваем прослушиватель событий для события «конец», которое генерируется, когда все данные получены. В обработчике событий мы записываем переменную data в консоль.

Вы также можете использовать модуль http для отправки POST-запросов и других типов HTTP-запросов. Вот пример того, как отправить запрос POST:

const http = require('http');
const data = JSON.stringify({ name: 'John', age: 30 });

const options = {
  hostname: 'localhost',
  port: 8080,
  path: '/data',
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Content-Length': data.length
  }
};

const req = http.request(options, res => {
  res.setEncoding('utf8');
  let data = '';
  res.on('data', chunk => {
    data += chunk;
  });
  res.on('end', () => {
    console.log(data);
  });
});

req.write(data);
req.end();

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

Затем мы вызываем метод request для объекта http, передавая ему объект параметров и функцию обратного вызова, которая будет вызываться при получении ответа. В функции обратного вызова мы устанавливаем кодировку ответа «utf8» и создаем переменную для хранения данных ответа, как в примере с запросом GET.

Перед завершением запроса мы используем метод write для записи данных в тело запроса, а затем вызываем метод end для отправки запроса.

HTTP-запросы с библиотеками

Хотя можно выполнять HTTP-запросы с использованием встроенных API и модулей, описанных выше, также есть несколько доступных библиотек, которые могут сделать этот процесс еще проще.

Аксиос

Одной из популярных библиотек для выполнения HTTP-запросов в Node.js является axios. axios — это HTTP-клиент на основе Promise, который работает в браузере и в Node.js. Вот пример того, как использовать axios для отправки запроса GET на сервер для получения некоторых данных:

const axios = require('axios');

axios.get('/data')
  .then(response => console.log(response.data))
  .catch(error => console.error(error));

В этом примере нам требуется библиотека axios, а затем вызывается метод get, передавая ему URL-адрес, на который мы хотим отправить запрос. Метод get возвращает обещание, которое разрешается с ответом сервера.

Мы связываем вызов метода then с промисом, возвращенным axios.get, и в функции обратного вызова мы записываем свойство data объекта ответа в консоль. Если в какой-то момент произойдет ошибка, она будет обнаружена методом catch, который запишет ошибку в консоль.

Вы также можете использовать axios для отправки POST-запросов и других типов HTTP-запросов. Вот пример того, как отправить запрос POST:

const axios = require('axios');

axios.post('/data', { name: 'John', age: 30 })
  .then(response => console.log(response.data))
  .catch(error => console.error(error));

В этом примере нам требуется библиотека axios, а затем вызывается метод post, передавая ему URL-адрес, на который мы хотим отправить запрос, и объект, содержащий данные, которые мы хотим отправить. Метод post возвращает обещание, которое разрешается с ответом сервера.

Мы связываем вызов метода then с промисом, возвращенным axios.post, и в функции обратного вызова мы записываем свойство data объекта ответа в консоль. Если в какой-то момент произойдет ошибка, она будет обнаружена методом catch, который выведет ошибку на консоль.

jQuery

Другой популярной библиотекой для выполнения HTTP-запросов в браузере является jQuery, которая предоставляет ряд служебных функций для выполнения Ajax-запросов. Вот пример того, как использовать jQuery для отправки запроса GET на сервер для получения некоторых данных:

$.get('/data', data => {
  console.log(data);
});

В этом примере мы вызываем функцию get, предоставленную jquery, и передаем ей URL-адрес, на который мы хотим отправить запрос, и функцию обратного вызова, которая будет вызываться при получении ответа. В функции обратного вызова мы записываем данные в консоль.

Вы также можете использовать jquery для отправки POST-запросов и других типов HTTP-запросов. Вот пример того, как отправить запрос POST:

$.post('/data', { name: 'John', age: 30 }, data => {
  console.log(data);
});

В этом примере мы вызываем функцию post, предоставленную jquery, и передаем ей URL-адрес, на который мы хотим отправить запрос, объект, содержащий данные, которые мы хотим отправить, и функцию обратного вызова, которая будет вызываться при получении ответа. В функции обратного вызова мы записываем данные в консоль.

Заключение

В этой статье мы рассмотрели, как писать HTTP-запросы на JavaScript как в браузере, так и в Node.js, как с использованием библиотек, так и без них. Мы также рассмотрели несколько различных вариантов создания HTTP-запросов, включая объект XMLHttpRequest, API fetch, модуль http и такие библиотеки, как axios и jquery.

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

Статья Совершенствуйте свою игру в веб-разработке: научитесь писать HTTP-запросы на JavaScript была впервые опубликована во вторник, 3 января 2023 г., в Блоге технических разработчиков. Для получения новейшего актуального контента, только что из печи, посетите https://techdevblog.io и подпишитесь на нашу рассылку!