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

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

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

20 ответов


Да, вы можете получить доступ к req.URL-адрес и строение url модуль URL-адрес.разбор это вручную:

var url = require('url');
var url_parts = url.parse(request.url, true);
var query = url_parts.query;
, в expressjs это уже сделано для вас, и вы можете просто использовать req.запрос для этого:
var id = req.query.id; // $_GET["id"]

Так как Вы упомянули Express.js в ваших тегах, вот экспресс-конкретный ответ: используйте req.запрос. Е. Г.

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

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

app.listen(3000);

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

req.params получает только параметры маршрута, а не параметры строки запроса. Вижу экспресс или Парус документы:

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

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

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

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

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

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


Для Экспресс.js вы хотите сделать req.params:

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

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

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

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

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

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

})

есть 2 способа передать параметры через GET method

Способ 1 : Подход MVC, где вы передаете параметры, такие как /routename/:paramname
В этом случае можно использовать req.парамы.paramname чтобы получить значение параметра, например, см. ниже код, где я ожидаю Id как param
ссылка может быть такой: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);

обновление 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

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


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


если вы используете ЕС6 и Экспресс попробуй такое разрушение подход:

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)

небольшой узел.JS HTTP server прослушивает порт 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".


Whitequark ответил красиво. Но с текущими версиями Node.js и Экспресс.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'));
})

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

пример URL:

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

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

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

выход

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

для конкретной печати:

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

выход

activatekey: $2a $ 08$jvGevXUOvYxKsiBt.ПМП.zgzD4C / wwTsvjzfUrqLrgS3zXJVfVRK


можно использовать

request.query.<varible-name>;

вы можете использовать с express ^4.15.4:

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

надеюсь, что это помогает.


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

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


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

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

и это все, предполагая, что вы используете синтаксис es6.

PD. {id} расшифровывается как Object destructuring, новая функция es6.


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

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

в expressjs это делается,

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

Я использую MEANJS 0.6.0 С express@4.16, это хорошо

клиент:


вы можете использовать req.params с ExpressJS

router.get('/recipe/:id', function (req, res, next) {
        database.sendQuery("SELECT * FROM recipe WHERE id = " + req.params.id , function (err, results) {
            if (err) {
                console.log(err)
            } else {
                res.json(results)
            }
        })
    });