Модуль url в 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 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 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 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 обычно содержит следующие свойства:
- Протокол (protocol)- например, 'http:' или 'https:'
- Аутентификационные данные (auth)- содержит имя пользователя и пароль
- Хост (host)- имя хоста и номер порта
- Имя хоста (hostname)- только имя хоста
- Порт (port)- номер порта
- Путь (pathname)- путь к ресурсу
- Строка запроса (search)- строка запроса, начинающаяся с '?'
- Параметры запроса (query)- результат разбора строки запроса
- Идентификатор фрагмента (hash)- идентификатор фрагмента, начинающийся с '#'
Новый API URL
Node.js также предоставляет новый API, основанный на стандарте WHATWG URL:
Класс 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 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 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 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 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);
Лучшие
- Всегда проверяйте URL-адреса- При обработке URL-адресов, предоставленных пользователем, всегда проверяйте их корректность
- Используйте новый API- Предпочитайте WHATWG URL API, так как он больше соответствует современным стандартам
- Обработка исключений- Используйте try-catch для обработки ошибок, которые могут возникнуть при разборе URL
- Кодирование специальных символов- Используйте
encodeURIComponent()для кодирования специальных символов в параметрах запроса - Вопросы безопасности- При обработке перенаправлений проверяйте целевой 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, и создавать более надёжные и безопасные веб-приложения.
Встроенные модули Node.js