Как получить переменные GET (строки запроса) в Express.js на Node.js?
Можем ли мы получить переменные из строки запроса в Node.js так же, как это делается с помощью $_GET
в PHP?
Я знаю, что в Node.js мы можем получить URL из запроса. Есть ли метод для получения параметров строки запроса?
5 ответ(ов)
В Express.js для получения параметров из URL вы можете использовать req.params
. Вот пример кода:
app.get('/user/:id', function(req, res) {
res.send('user ' + req.params.id);
});
В этом примере, когда вы делаете GET-запрос к пути /user/123
, ответ будет 'user 123'
. Параметр :id
в URL будет доступен через req.params.id
.
Для получения параметров запроса и параметров маршрута в Express можно использовать req.query
для доступа к запросам и req.params
для получения параметров URL. Рассмотрим пример:
// Получаем query-строку и параметры в Express
// Пример запроса: example.com/user/000000?sex=female
app.get('/user/:id', function(req, res) {
const query = req.query; // query = {sex: "female"}
const params = req.params; // params = {id: "000000"}
// Здесь вы можете использовать переменные query и params по вашему усмотрению
console.log(query); // Выведет: { sex: 'female' }
console.log(params); // Выведет: { id: '000000' }
// Отправляем ответ клиенту
res.send({ query, params });
});
Таким образом, req.query
содержит параметры запроса, а req.params
содержит параметры маршрута. В примере выше, если пользователь перейдет по URL example.com/user/000000?sex=female
, то query
будет равно { sex: "female" }
, а params
будет равно { id: "000000" }
.
Я почитал другие ответы и решил использовать следующий код на своем сайте:
var query = require('url').parse(req.url, true).query;
После этого вы можете просто вызывать
var id = query.id;
var option = query.option;
где URL для GET-запроса должен выглядеть так:
/path/filename?id=123&option=456
Если вы используете ES6 и Express, попробуйте следующий подход с использованием деструктуризации
:
const {id, since, fields, anotherField} = request.query;
В контексте:
const express = require('express');
const app = express();
app.get('/', function(req, res){
const {id, since, fields, anotherField} = req.query;
});
app.listen(3000);
Вы также можете использовать значения по умолчанию с деструктуризацией
:
// пример запроса для тестирования
const req = {
query: {
id: '123',
fields: ['a', 'b', 'c']
}
}
const {
id,
since = new Date().toString(),
fields = ['x'],
anotherField = 'default'
} = req.query;
console.log(id, since, fields, anotherField);
В этом примере, если since
, fields
и anotherField
не были переданы в query
, то им будут присвоены значения по умолчанию.
Существует два способа передачи параметров методом GET.
Метод 1:
Подход MVC, где параметры передаются в формате /имя_маршрута/:имя_параметра
.
В этом случае вы можете использовать req.params.имя_параметра
для получения значения параметра. Например, смотрите код ниже, где я ожидаю Id в качестве параметра.
Ссылка может выглядеть так: http://myhost.com/items/23
var express = require('express');
var app = express();
app.get("/items/:id", function(req, res) {
var id = req.params.id;
// дальнейшие операции
});
app.listen(3000);
Метод 2:
Общий подход: передача переменных в виде строки запроса с использованием оператора ?
.
Например, смотрите код ниже, где я ожидаю Id в качестве параметра запроса.
Ссылка может выглядеть так: http://myhost.com/items?id=23
var express = require('express');
var app = express();
app.get("/items", function(req, res) {
var id = req.query.id;
// дальнейшие операции
});
app.listen(3000);
Таким образом, вы можете выбирать любой из предложенных методов в зависимости от ваших потребностей.
Запись в файлы в Node.js
Ошибка "npm WARN package.json: Нет поля repository"
Как предотвратить установку "devDependencies" модулей NPM для Node.js (package.json)?
Как исправить ошибку "ReferenceError: primordials is not defined" в Node.js
nvm постоянно "забывает" Node.js в новой сессии терминала