Как получить переменные GET (строка запроса) в Express.js на Node.js? - PullRequest
1037 голосов
/ 02 августа 2011

Можем ли мы получить переменные в строке запроса в Node.js так же, как мы получаем их в $_GET в PHP?

Я знаю, что в Node.js мы можем получить URL в запросе.Есть ли способ получить параметры строки запроса?

Ответы [ 23 ]

1607 голосов
/ 02 августа 2011

Поскольку вы упомянули Express.js в своих тегах, вот специальный ответ Express: используйте req.query .Например,

var express = require('express');
var app = express();

app.get('/', function(req, res){
  res.send('id: ' + req.query.id);
});

app.listen(3000);
986 голосов
/ 02 августа 2011

В Express это уже сделано для вас, и вы можете просто использовать req.query для этого:

var id = req.query.id; // $_GET["id"]

В противном случае в NodeJS вы можете получить доступ к req.url и встроенный url модуль для [url.parse] (https://nodejs.org/api/url.html#url_url_parse_urlstring_parsequerystring_slashesdenotehost) это вручную:

var url = require('url');
var url_parts = url.parse(request.url, true);
var query = url_parts.query;
446 голосов
/ 11 февраля 2012

В экспрессе используйте req.query.

req.params получает только параметры маршрута, а не параметры строки запроса. См. Экспресс или паруса документация:

(req.params) Проверяет параметры маршрута, например: / user /: id

(req.query) Проверяет параметры строки запроса, например:? Id = 12 Проверяет параметры тела в кодировке urlencoded

(req.body), ex: id = 12 Чтобы использовать тела запросов с кодировкой urlen, req.body должен быть объектом. Это можно сделать с помощью промежуточного программного обеспечения _express.bodyParser.

Тем не менее, в большинстве случаев вы хотите получить значение параметра независимо от его источника. В этом случае используйте req.param('foo').

Значение параметра будет возвращено независимо от того, была ли переменная в параметрах маршрута, строке запроса или в кодированном теле запроса.

Примечание: если вы хотите пересечь все три типа параметров запроса (аналогично PHP $_REQUEST), вам просто нужно объединить параметры вместе - вот как я настроил это в паруса . Помните, что объект параметров пути / маршрута (req.params) имеет свойства массива, поэтому порядок имеет значение (хотя это может измениться в Express 4 )

130 голосов
/ 02 августа 2011

Для Express.js вы хотите сделать req.params:

app.get('/user/:id', function(req, res) {
  res.send('user' + req.params.id);    
});
71 голосов
/ 26 ноября 2012

Я узнал из других ответов и решил использовать этот код на своем сайте:

var query = require('url').parse(req.url,true).query;

Тогда вы можете просто позвонить

var id = query.id;
var option = query.option;

где URL для получения должен быть

/path/filename?id=123&option=456
39 голосов
/ 15 февраля 2017
//get query&params in express

//etc. 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"}

})
37 голосов
/ 18 февраля 2017

Если вы используете ES6 и Express , попробуйте этот подход destructuring:

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);

Вы также можете использовать значения по умолчанию с destructuring:

// sample request for testing
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)
36 голосов
/ 02 августа 2011

Вы должны иметь возможность сделать что-то вроде этого:

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

http.createServer(function(req,res){
    var url_parts = url.parse(req.url, true);
    var query = url_parts.query;

    console.log(query); //{Object}

    res.end("End")
})
32 голосов
/ 26 мая 2016

Есть 2 способа передачи параметров через метод GETСпособ 1: подход MVC, где вы передаете параметры, такие как / routename /: paramnameВ этом случае вы можете использовать req.params.paramname для получения значения параметра. Например, см. Ниже код, где я ожидаю 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;
//further operations to perform
});
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;
    //further operations to perform
});
app.listen(3000);
24 голосов
/ 05 августа 2012

ОБНОВЛЕНИЕ 4 мая 2014 года

Старый сохраненный здесь ответ: https://gist.github.com/stefek99/b10ed037d2a4a323d638


1) Установить экспресс: npm install express

app.js

var express = require('express');
var app = express();

app.get('/endpoint', function(request, response) {
    var id = request.query.id;
    response.end("I have received the ID: " + id);
});

app.listen(3000);
console.log("node express app started at http://localhost:3000");

2) Запустите приложение: node app.js

3) Посетите в браузере: http://localhost:3000/endpoint?id=something

Я получил удостоверение личности: что-то


(с момента моего ответа многое изменилось, и я считаю, что стоит обновлять его)

...