Node.js의 Express.js에서 GET (쿼리 문자열) 변수를 얻는 방법은 무엇입니까?


1191

$_GETPHP 에서와 마찬가지로 Node.js의 쿼리 문자열에서 변수를 얻을 수 있습니까?

Node.js에서 요청의 URL을 얻을 수 있음을 알고 있습니다. 쿼리 문자열 매개 변수를 얻는 방법이 있습니까?


6
@whitequark의 답변 (가장 많은 투표)은 정답으로 표시되어야합니다. 질문에 걸려 넘어지는 질문과 동일한 질문으로 다른 사람을 위해 업데이트 하시겠습니까?
Dev01

빠른 요청에 쿼리 개체를 사용합니다. 다음은 빠른 요청 쿼리를 사용하는 예입니다.
drorw

@ Dev01 그는 2014 롤 이후 활동적이지 않습니다
John Balvin Arias

Expressjs 및 MongoDB가있는 Nodejs API 상용구를 찾고 있다면. 이 시도 github.com/maitraysuthar/rest-api-nodejs-mongodb
Maitray Suthar

답변:


1179

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;

24
여기주의 : .parse (url, true ) url.parse(urlStr, [parseQueryString], [slashesDenoteHost])
befzz

hapi는 어떤 추가 기능을 제공합니까 (있는 경우)?
BaltoStar

180
이것은 받아 들여지지 만 선호되는 대답은 아닙니다. 아래를보십시오! 사용req.query
Cheeso

2
아래의 mikemcneil의 답변이 더 나은 선택입니다. req.query또는 req.param(다음과는 다릅니다 req.params... 사용)
MindJuice

9
-1 . 위의 코드는 Deadweight입니다. 좋은 개발자가 그 자리에서 리팩터링 할 것입니다. 이것은 " URL의 쿼리 문자열을 얻는 방법 "에 대한 답변입니다. 문제의 URL은 이름이 지정된 개체에 request있으며 Express와 관련이 없습니다. 아래 @whitequark의 답변을 참조하십시오 (use request.query)
lunohodov

1649

태그에 Express.js를 언급 했으므로 다음과 같은 특급 답변이 있습니다 : use req.query . 예 :

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

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

app.listen(3000);

67
req.query.id괄호 표기법을 사용할 필요가 없다는 것을 언급 할 가치가 있습니다 .
alex

express를 설치하려면 다음을 수행하십시오. yes | sudo npm install -g express --- 편집하려고했지만 Alexis King이 복귀되었습니다.
Felipe

질문에서 그는 배열과 같은 모든 쿼리 문자열 매개 변수를 얻는 방법을 찾고있었습니다. 정답은 다음과 같습니다. app.get ( '/', function (req, res) {console.log (req.query);});
Richard Torcato 2016 년

463

Express에서는 req.query .

req.params쿼리 문자열 매개 변수가 아닌 경로 매개 변수 만 가져옵니다. 특급 또는 항해 문서를 참조하십시오 .

(req.params) 경로 매개 변수를 확인합니다 (예 : / user / : id).

(req.query) 쿼리 문자열 매개 변수를 확인합니다. 예 :? id = 12 urlencoded body params를 확인합니다.

(req.body), 예 : id = 12 urlencoded 요청 본문을 활용하려면 req.body가 객체 여야합니다. _express.bodyParser 미들웨어를 사용하여 수행 할 수 있습니다.

즉, 대부분의 경우 소스에 관계없이 매개 변수의 값을 얻으려고합니다. 이 경우을 사용하십시오 req.param('foo').

변수가 경로 매개 변수, 쿼리 문자열 또는 인코딩 된 요청 본문에 있는지 여부에 따라 매개 변수 값이 리턴됩니다.

참고 사항-세 가지 유형의 요청 매개 변수 (PHP와 유사)의 교차를 얻으려면 매개 변수 $_REQUEST를 병합하면됩니다. 여기 에서 Sails에서 설정 하는 방법이 있습니다. 경로 / 경로 매개 변수 객체 ( req.params)에는 배열 속성이 있으므로 순서가 중요합니다 ( Express 4에서는 변경 될 수 있음 )


req.param ( 'STRING')이 정답입니다. 여기를보십시오 : stackoverflow.com/questions/17007997/… (허용 된 답변 아래로 답하기 위해 아래로 스크롤)
Joseph Juhnke

3
@deltab 여기 req.params세일즈 문서 : sailsjs.org/#/documentation/reference/req/req.params.html 및 새로운 특급 문서 : expressjs.com/4x/api.html#req.params
mikermcneil

7
req.param은 express 4.x에서 더 이상 사용되지 않으므로 req.params, req.body 또는 req.query를 대신 사용해야합니다. expressjs.com/en/4x/api.html#req.param
swang

@ swang 맞아요-최근 Doug Wilson과 함께 두 번 확인 req.param()했으며 Express 5에서 도우미 기능이 완전히 제거 될 가능성이 높습니다. 그때까지이 대답. 그 동안 : req.param()Express <= 3.x / Sails <= 0.12 더 이상 사용되지 않는 Express 4 릴리스 (사용 중단 로그 메시지 포함) 함께 사용 하는 것이 안전 합니다. (Sails 사용자의 경우 : req.param()Sails v1.0부터 구현이 코어로 이동하고 앞으로 Sails에서 계속 지원 될 것입니다.)
mikermcneil

142

Express.js의 경우 다음을 수행하십시오 req.params.

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

8
express.js에서 GET 변수를 검색하려면 req.query를 사용할 수 있습니다.
벤 싱클레어

6
다음과 같은 이유로 @Andy req.params가 더 좋습니다. 경로 매개 변수 (req.params)를 확인합니다. 예 : / user / : id 쿼리 문자열 매개 변수 (req.query)를 확인합니다. body, req.body는 객체 여야합니다. _express.bodyParser 미들웨어를 사용하여 수행 할 수 있습니다.
Cris-O

req.param이 req.query에 대한 검사를 알지 못했습니다.이 메모에 감사드립니다.
Ben Sinclair

3
req.param ( 'parameterName')은 req.body, req.query 및 req.params를 검사하지만 모든 쿼리 매개 변수를 객체로 사용하려면 req.query를 사용해야합니다.
mikermcneil

1
@ mikermcneil 아마도 req.param ()과 req.params (object)를 혼합했을 것입니다. expressjs 문서에 따르면 req.param ()은 세 객체 모두에서 가치를 찾습니다. expressjs.com/api.html#req.param
Ben Sinclair

78

다른 답변에서 배우고 내 사이트 전체 에서이 코드를 사용하기로 결정했습니다.

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

그럼 당신은 전화 할 수 있습니다

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

get의 URL은

/path/filename?id=123&option=456

2
쿼리는 단지 문자열이기 때문에 id와 옵션이 정의되지 않습니까? 우리는 정규 표현식 등으로 두 개의 개별 매개 변수를 파싱해야합니다.
ossek

1
@ossek 나는 원인 행위 생각 parsereq.url객체로 변환합니다.
whitfin

1
@ossek, 그는 url.parse에 대한 두 번째 인수로 true를 제공했습니다. 이것은 쿼리 속성이 객체를 가리키고 내부적으로 쿼리 문자열 모듈을 사용 하도록합니다. / latest / api /… )
Bharat

일했다 .... 많은 감사합니다 !!!
Prateek Gupta

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

})

48

ES6Express를 사용하는 경우 다음 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)


기본값으로 객체 파괴 사용! +1
리드 개발자

43

GET 메소드를 통해 매개 변수를 전달하는 방법은 두 가지가 있습니다.

방법 1 : / routename / : paramname과 같은 매개 변수를 전달하는 MVC 방식
이 경우 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);

40

다음과 같은 작업을 수행 할 수 있어야합니다.

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

26

2014 년 5 월 4 일 업데이트

오래된 대답은 여기에 보존되었습니다 : 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

나는 ID를 받았다 : 무엇인가


(내 답변 이후 많은 것들이 바뀌었고 최신 상태로 유지할 가치가 있다고 생각합니다)


20

포트 9080에서 수신하고 GET 또는 POST 데이터를 구문 분석하고 응답의 일부로 클라이언트에 다시 보내는 작은 Node.js HTTP 서버는 다음과 같습니다.

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"를 입력하여 콘솔에서 실행하십시오.


3
이 예에서는 sys가 필요하지 않습니다
danwellman

20

화이트 쿼크가 잘 응답했습니다. 그러나 현재 버전의 Node.js 및 Express.js에는 한 줄이 더 필요합니다. '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'));
})

15

너무 간단합니다 :

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

산출

활성화 키 : $ 2a $ 08 $ jvGevXUOvYxKsiBt.PpMs.zgzD4C / wwTsvjzfUrqLrgS3zXJVfVRK



13

express ^ 4.15.4와 함께 사용할 수 있습니다.

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

도움이 되었기를 바랍니다.


6

에서 express.js당신은 아주 쉽게 그것을 얻을 수 있습니다, 당신은 당신의 컨트롤러 기능으로 할 필요가 있습니다 :

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

그리고 es6 구문을 사용한다고 가정하면됩니다.

PD. 새로운 es6 기능을 {id}나타냅니다 Object destructuring.


node와 함께 express를 사용하므로 완벽하게 작동했습니다. 감사합니다!
user752746

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

이것을 사용하거나 요청 매개 변수에서 특수 요소를 구문 분석하기 위해 본문 파서를 시도 할 수 있습니다.


1
이것이 어떻게 질문에 대답하는지 더 설명 할 수 있습니까?
니코 하세

그리고 이것은 기존 매개 변수 목록을 어떻게 구문 분석합니까?
니코 하세

node.js에서 body-parser 모듈을 사용할 수 있습니다
Mehedi Abdullah

1

실제로 간단합니다.

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

url.parse를 사용하여 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
});

0

Express에서는 간단히 사용할 수 있습니다 req.query.<name>. $_GET['name']PHP 와 동일하게 작동합니다 .


0

제 관점에서 저는 많은 사람들이 두 가지 다른 개념을 혼합한다고 생각합니다. REST 개발 중에는 "경로 변수"와 "요청 매개 변수"(쿼리 매개 변수)라는 두 가지 방법으로 URL에 정보를 전달하는 데 익숙했습니다. RFC는 다음과 같이 URI 부분을 설명합니다. 여기에 링크 설명을 입력하십시오. 따라서 저자는 요청 매개 변수를 전달하는 방법을 알고 싶다는 것을 이해했습니다. 주제를 더 이해하기 쉽게 만들고 싶었지만 해결책은 여러 번 언급되었습니다.

를 사용하여 URI에서 쿼리 매개 변수를 얻을 수 있습니다 request.query.<name of the parameter>. 두 번째 언급 한 솔루션이었고 request.params.<name of the parameter>경로 변수를 얻을 수 있습니다.


0

따라서이 "id"를받는 두 가지 방법이 있습니다. 1) params 사용 : 코드 params는 다음과 같습니다.

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

그런 다음 params의 경우 다음과 같은 작업을 수행 할 수 있습니다.

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

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

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

app.listen(3000);

0

(및 다른 답변에서 변수를 지정할 수 있다고 언급하지 않았 음) 뿐만 아니라 GET요청 을 보내야 하는 경우이 기능을 사용할 수 있습니다.IPDomainport

function getCode(host, port, path, queryString) {
    console.log("(" + host + ":" + port + path + ")" + "Running httpHelper.getCode()")

    // Construct url and query string
    const requestUrl = url.parse(url.format({
        protocol: 'http',
        hostname: host,
        pathname: path,
        port: port,
        query: queryString
    }));

    console.log("(" + host + path + ")" + "Sending GET request")
    // Send request
    console.log(url.format(requestUrl))
    http.get(url.format(requestUrl), (resp) => {
        let data = '';

        // A chunk of data has been received.
        resp.on('data', (chunk) => {
            console.log("GET chunk: " + chunk);
            data += chunk;
        });

        // The whole response has been received. Print out the result.
        resp.on('end', () => {
            console.log("GET end of response: " + data);
        });

    }).on("error", (err) => {
        console.log("GET Error: " + err);
    });
}

파일 상단에 모듈이 필요하다는 것을 놓치지 마십시오.

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

또한 https보안 도메인 및 SSL을 통한 통신을 위해 모듈을 사용할 수 있습니다 . 따라서이 두 줄은 변경됩니다.

https = require("https");
...
https.get(url.format(requestUrl), (resp) => { ......

-1

서버 코드와 섞이지 않는 이유

예. PHP

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

</script>

-2

express@4.16과 함께 MEANJS 0.6.0 을 사용 하고 있습니다.

고객:

제어 장치:

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
  ...

-3

-------- 쿼리 문자열 데이터 액세스 -------
링크 http://webapplog.com/search?term=node.js&page=1 이라고 가정합니다 .

따라서 명시 적으로 다음을 사용할 수 있습니다.

  • req.query.term
  • req.query.page 또는
  • 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}) })

-------- URL 매개 변수 액세스 -------
이것이 링크 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}) })
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.