Как получить переменные GET (строка запроса) в Express.js на Node.js?

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

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

Ответ 1

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

Ответ 2

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

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

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

app.listen(3000);

Ответ 3

В Express используйте req.query.

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

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

(req.query) Проверяет параметры строки запроса, ex:? id = 12 Проверяет параметры urlencoded body

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

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

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

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

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

Если вы используете 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)

Ответ 7

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

})

Ответ 8

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

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")
})

Ответ 9

Есть два способа передачи параметров с помощью метода GET

Способ 1: Подход MVC, в котором вы передаете параметры, такие как /routeename/: 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);

Ответ 10

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

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


1) Установите express: 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

Я получил идентификатор: something


(многое изменилось с момента моего ответа, и я считаю, что это стоит держать в курсе последних событий)

Ответ 11

Небольшой Node.js HTTP-сервер, прослушивающий порт 9080, разбор данных GET или POST и отправка обратно клиенту в качестве части ответа:

var sys = require('sys'),
url = require('url'),
http = require('http'),
qs = require('querystring');

var server = http.createServer(

    function (request, response) {

        if (request.method == 'POST') {
                var body = '';
                request.on('data', function (data) {
                    body += data;
                });
                request.on('end',function() {

                    var POST =  qs.parse(body);
                    //console.log(POST);
                    response.writeHead( 200 );
                    response.write( JSON.stringify( POST ) );
                    response.end();
                });
        }
        else if(request.method == 'GET') {

            var url_parts = url.parse(request.url,true);
            //console.log(url_parts.query);
            response.writeHead( 200 );
            response.write( JSON.stringify( url_parts.query ) );
            response.end();
        }
    }
);

server.listen(9080);

Сохраните его как parse.js и запустите его на консоли, введя "node parse.js".

Ответ 12

Whitequark ответила красиво. Но с текущими версиями Node.js и Express.js требуется еще одна строка. Обязательно добавьте "require http" (вторая строка). Я опубликовал здесь более полный пример, показывающий, как этот вызов может работать. После запуска введите http://localhost:8080/?name=abel&fruit=apple в свой браузер, и вы получите отличный ответ на основе кода.

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

app.configure(function(){
    app.set('port', 8080);
});

app.get('/', function(req, res){
  res.writeHead(200, {'content-type': 'text/plain'});
  res.write('name: ' + req.query.name + '\n');
  res.write('fruit: ' + req.query.fruit + '\n');
  res.write('query: ' + req.query + '\n');
  queryStuff = JSON.stringify(req.query);
  res.end('That\ all folks'  + '\n' + queryStuff);
});

http.createServer(app).listen(app.get('port'), function(){
    console.log("Express server listening on port " + app.get('port'));
})

Ответ 13

Это так просто:

Пример URL:

http://stackoverflow.com:3000/activate_accountid=3&activatekey=$2a$08$jvGevXUOvYxKsiBt.PpMs.zgzD4C/wwTsvjzfUrqLrgS3zXJVfVRK

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

console.log("All query strings: " + JSON.stringify(req.query));

Выход

Все строки запроса: { "id": "3", "activatekey": "$ 2a $08 $jvGevXUOvYxKsiBt.PpMs.zgzD4C/wwTsvjz fUrqLrgS3zXJVfVRK" }

Для печати:

console.log("activatekey: " + req.query.activatekey);

Выход

activatekey: $2a $08 $jvGevXUOvYxKsiBt.PpMs.zgzD4C/wwTsvjzfUrqLrgS3zXJVfVRK

Ответ 14

Вы можете использовать с экспрессом ^ 4.15.4:

var express = require('express'),
    router = express.Router();
router.get('/', function (req, res, next) {
    console.log(req.query);
});

Надеюсь это поможет.

Ответ 15

Вы можете использовать

request.query.<varible-name>;

Ответ 16

В express.js вы можете сделать это довольно просто, все что вам нужно сделать в вашей функции контроллера:

app.get('/', (req, res, next) => {
   const {id} = req.query;
   // rest of your code here...
})

И это все, если вы используете синтаксис es6.

Оплаченный {id} означает " Object destructuring, новую функцию es6.

Ответ 17

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

Вы можете использовать это или попробовать body-parser для разбора специального элемента из параметров запроса.

Ответ 18

Получение любого параметра URL

В этом примере мы возьмем параметр непосредственно из URL.

Допустим, мы используем пример URL: http://example.com/api/users/?id=4&token=sdfa3&geo=us

Параметры, которые получаются из этого:

id 4

токен sdfa3

гео нас

Очень легко получить эти параметры. Здесь маршрут и метод получения параметров - req.param().

//маршруты пойдут сюда

app.get('/api/users', function(req, res) {
  var user_id = req.query.id;
  var token = req.query.token;
  var geo = req.query.geo;  

  res.send(user_id + ' ' + token + ' ' + geo);
});

Параметры, естественно, передаются через часть req (request).

Теперь, если мы перейдем в наш браузер по адресу http://localhost:8080/api/users/?id=4&token=sdfa3&geo=us

мы сможем увидеть три параметра!

Ответ 19

Это на самом деле просто:

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

app.get('/post', (req, res, next) => {
  res.send('ID:' + req.query.id + ' Edit:'+ req.query.edit);
});

app.listen(1000);

// localhost:1000/post?id=123&edit=true
// output: ID: 123 Edit: true

Ответ 20

Вы можете использовать модуль url для сбора параметров с помощью url.parse

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

В экспрессе это сделано,

var id = req.query.id;

Например:

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

app.get('/login', function (req, res, next) {
    console.log(req.query);
    console.log(req.query.id); //Give parameter id
});

Ответ 21

С моей точки зрения, я думаю, что многие люди смешивают два разных понятия. Во время разработки REST я был знаком с передачей информации в URL двумя способами: "переменные пути" и "параметры запроса" (параметры запроса). RFC описывает части URI следующим образом: введите здесь описание ссылки. Итак, я понял, что автору хотелось бы знать, как передавать параметры запроса. Я хотел бы только облегчить понимание темы, но решение упоминалось здесь много раз.

Вы можете получить параметры запроса из URI с помощью request.query.<name of the parameter>, второе упомянутое решение было request.params.<name of the parameter> и с его помощью вы можете получить переменные пути.

Ответ 22

Итак, есть два способа получить этот "идентификатор": 1) использование параметров: параметры кода будут выглядеть примерно так: Скажем, у нас есть массив,

const courses = [{
    id: 1,
    name: 'Mathematics'
},
{
    id: 2,
    name: 'History'
}
];

Тогда для параметров мы можем сделать что-то вроде:

app.get('/api/posts/:id',(req,res)=>{
    const course = courses.find(o=>o.id == (req.params.id))
    res.send(course);
});

2) Другой метод - использовать параметры запроса. поэтому URL будет выглядеть примерно так: ".....\api\xyz? id = 1", где "? id = 1" - это часть запроса. В этом случае мы можем сделать что-то вроде:

app.get('/api/posts',(req,res)=>{
    const course = courses.find(o=>o.id == (req.query.id))
    res.send(course);
});

Ответ 23

Я использую MEANJS 0.6.0 с [email protected], это хорошо

Клиент:

контроллер:

var input = { keyword: vm.keyword };
ProductAPi.getOrder(input)

Сервисы:

this.getOrder = function (input) {return $http.get('/api/order', { params: input });};

сервер

маршруты

app.route('/api/order').get(products.order);

контроллер

exports.order = function (req, res) {
  var keyword = req.query.keyword
  ...

Ответ 24

В Express мы можем просто использовать req.query.<name>. Он работает так же, как $_GET['name'] в PHP.

Ответ 25

почему не смешивается с кодом сервера

например, php

<script>
var ip=<?php echo($_SERVER['REMOTE_ADDR']);?>

</script>

Ответ 26

--------Accessing Строка запроса Data-------
Предположим, это ссылка http://webapplog.com/search?term=node.js&page=1.

Так что в экспрессе вы можете использовать:

  • req.query.term
  • req.query.page или
  • req.query (он будет req.query запрос в объекте)

    //Пример
    app.get('http://webapplog.com/search?term=node.js&page=1',(req, res)=>{ res.json({term:req.query.term, page:req.query.page}) })

--------Accessing URL Parameters-------
Предположим, что это ссылка http://webapplog.com/node.js/pages/100
Так что в экспрессе вы можете использовать: app.get('/:term/pages/:page',....)

  • req.params.term
  • req.params.page

    // Пример
    app.get('http://webapplog.com/:term/pages/:page',(req, res)=>{ res.json({term:req.params.term, page:req.params.page}) })