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

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

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

Ответы [ 23 ]

18 голосов
/ 06 сентября 2014

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\'s all folks'  + '\n' + queryStuff);
});

http.createServer(app).listen(app.get('port'), function(){
    console.log("Express server listening on port " + app.get('port'));
})
18 голосов
/ 26 января 2013

Небольшой HTTP-сервер Node.js, прослушивающий порт 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".

13 голосов
/ 19 марта 2014

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

Пример 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", "activkey": "$ 2a $ 08 $ jvGevXUOvYxKsiBt.PpMs.zgzD4C / wwTsvjz fUrqLrgS3zXJVfVRK "}

Для печати необходимо:

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

Вывод

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

12 голосов
/ 03 сентября 2017

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

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

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

11 голосов
/ 07 мая 2017

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

request.query.<varible-name>;
6 голосов
/ 19 августа 2018

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

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

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

PD.{id} означает Object destructuring, новую функцию es6.

2 голосов
/ 31 июля 2018
    app.get('/user/:id', function(req, res) {
      res.send('user' + req.params.id);    
    });

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

0 голосов
/ 10 июля 2019

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

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
0 голосов
/ 15 апреля 2019

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

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

0 голосов
/ 07 марта 2019

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

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

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

...