Модуль url в Node.js

Java FileВстроенные модули Node.js


В Node.js,urlМодуль — это встроенный модуль, используемый для обработки и разбора URL (Uniform Resource Locators). Он предоставляет ряд служебных методов для удобного разбора, форматирования и обработки строк URL.

URL (Uniform Resource Locator) — это адрес в интернете, используемый для идентификации и определения местоположения ресурсов, например:

https://www.example.com:8080/path/to/resource?query=string#hash

Основные методы

метод url.parse()

url.parse()Этот метод используется для разбора строки URL в объект URL.

Пример

const url = require('url');

const urlString = 'https://www.example.com:8080/path/to/resource?query=string#hash';
const parsedUrl = url.parse(urlString);

console.log(parsedUrl);

Вывод будет содержать следующие свойства:

  • protocol: протокол (например, 'https:')
  • host: имя хоста и порт (например, 'www.example.com:8080')
  • hostname: имя хоста (например, 'www.example.com')
  • port: номер порта (например, '8080')
  • pathname: часть пути (например, '/path/to/resource')
  • query: строка запроса (например, 'query=string')
  • hash: идентификатор фрагмента (например, '#hash')

метод url.format()

url.format()Метод, в отличие отparse()И наоборот, он преобразует объект URL в строковую форму.

Пример

const url = require('url');

const urlObject = {
  protocol: 'https:',
  host: 'www.example.com:8080',
  pathname: '/path/to/resource',
  query: { query: 'string' },
  hash: '#hash'
};

const formattedUrl = url.format(urlObject);
console.log(formattedUrl);
// Вывод: https://www.example.com:8080/path/to/resource?query=string#hash

Метод url.resolve()

url.resolve()Этот метод используется для разрешения целевого URL относительно базового URL.

Пример

const url = require('url');

const baseUrl = 'https://www.example.com/path/';
const relativeUrl = 'to/resource';

const resolvedUrl = url.resolve(baseUrl, relativeUrl);
console.log(resolvedUrl);
// Вывод: https://www.example.com/path/to/resource

Структура объекта URL

Полный объект URL обычно содержит следующие свойства:

  1. Протокол (protocol)- например, 'http:' или 'https:'
  2. Аутентификационные данные (auth)- содержит имя пользователя и пароль
  3. Хост (host)- имя хоста и номер порта
  4. Имя хоста (hostname)- только имя хоста
  5. Порт (port)- номер порта
  6. Путь (pathname)- путь к ресурсу
  7. Строка запроса (search)- строка запроса, начинающаяся с '?'
  8. Параметры запроса (query)- результат разбора строки запроса
  9. Идентификатор фрагмента (hash)- идентификатор фрагмента, начинающийся с '#'

Новый API URL

Node.js также предоставляет новый API, основанный на стандарте WHATWG URL:

Класс URL

Пример

const { URL } = require('url');

const myUrl = new URL('https://www.example.com:8080/path/to/resource?query=string#hash');

console.log(myUrl.protocol); // 'https:'
console.log(myUrl.hostname); // 'www.example.com'
console.log(myUrl.port);     // '8080'
console.log(myUrl.pathname); // '/path/to/resource'
console.log(myUrl.search);   // '?query=string'
console.log(myUrl.hash);     // '#hash'

Класс URLSearchParams

URLSearchParamsПредоставляет удобные методы для работы со строками запроса:

Пример

const { URL, URLSearchParams } = require('url');

const myUrl = new URL('https://example.com/?name=John&age=30');
const params = new URLSearchParams(myUrl.search);

// Получить параметр
console.log(params.get('name')); // 'John'
console.log(params.get('age'));  // '30'

// Добавить параметр
params.append('city', 'New York');

// Удалить параметр
params.delete('age');

// Преобразовать в строку
console.log(params.toString()); // 'name=John&city=New+York'

Практические сценарии применения

1. Разбор URL-адресов запросов

Разберите URL клиентского запроса в HTTP-сервере:

Пример

const http = require('http');
const url = require('url');

const server = http.createServer((req, res) => {
  const parsedUrl = url.parse(req.url, истина);
 
  console.log('Путь:', parsedUrl.pathname);
  console.log('Запрос:', parsedUrl.query);
 
  res.end('URL успешно разобран');
});

server.listen(3000);

2. Создание конечных точек API

Используйте модуль URL для создания конечных точек RESTful API:

Пример

const http = require('http');
const url = require('url');

const server = http.createServer((req, res) => {
  const parsedUrl = url.parse(req.url, истина);
  const path = parsedUrl.pathname;
 
  if (path === '/api/users') {
    // Обработка запросов, связанных с пользователями
    res.end(JSON.stringify({ users: ['John', 'Jane'] }));
  } else if (path === '/api/products') {
    // Обработка запросов, связанных с товарами
    res.end(JSON.stringify({ products: ['Phone', 'Laptop'] }));
  } else {
    res.statusCode = 404;
    res.end('Не найдено');
  }
});

server.listen(3000);

3. Обработка параметров запроса

Пример

const http = require('http');
const url = require('url');

const server = http.createServer((req, res) => {
  const parsedUrl = url.parse(req.url, истина);
  const query = parsedUrl.query;
 
  if (parsedUrl.pathname === '/search') {
    const keyword = query.q || '';
    const page = parseInt(query.page) || 1;
   
    res.end(`Поиск по "${keyword}" на странице ${page}`);
  }
});

server.listen(3000);

Лучшие

  1. Всегда проверяйте URL-адреса- При обработке URL-адресов, предоставленных пользователем, всегда проверяйте их корректность
  2. Используйте новый API- Предпочитайте WHATWG URL API, так как он больше соответствует современным стандартам
  3. Обработка исключений- Используйте try-catch для обработки ошибок, которые могут возникнуть при разборе URL
  4. Кодирование специальных символов- ИспользуйтеencodeURIComponent()для кодирования специальных символов в параметрах запроса
  5. Вопросы безопасности- При обработке перенаправлений проверяйте целевой URL, чтобы предотвратить уязвимости открытого перенаправления

Пример

// Пример безопасности: проверка URL перенаправления
function isValidRedirect(url) {
  const allowedDomains = ['example.com', 'trusted-site.com'];
  const parsedUrl = new URL(url);
  return allowedDomains.includes(parsedUrl.hostname);
}

Освоив модуль Node.js,urlмодуль, вы можете легко выполнять различные операции, связанные с URL, и создавать более надёжные и безопасные веб-приложения.

Java FileВстроенные модули Node.js

Другие расширения