web-dev-qa-db-ja.com

Node.js上のExpress.jsでGET(クエリ文字列)変数を取得する方法

PHPの$_GETで変数を取得するのと同じように、Node.jsのクエリ文字列で変数を取得できますか?

Node.jsでリクエスト内のURLを取得できることを私は知っています。クエリ文字列パラメータを取得する方法はありますか?

1008
XMen

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

タグにExpress.jsを記載したので、Express固有の答えは次のとおりです。 use req.query 。例えば。

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

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

app.listen(3000);
1572
whitequark

Expressでは、req.queryを使用します。

req.paramsはルートパラメータのみを取得し、クエリ文字列パラメータは取得しません。 express または sails ドキュメントを参照してください:

(req.params)ルートパラメーターをチェックします。例:/ user /:id

(req.query)クエリ文字列パラメーターをチェックします。例:?id = 12 urlencoded body paramsをチェックします

(req.body)、ex:id = 12 urlencodeされたリクエストボディを利用するには、req.bodyはオブジェクトでなければなりません。これは、_express.bodyParserミドルウェアを使用して実行できます。

つまり、ほとんどの場合、ソースに関係なくパラメーターの値を取得する必要があります。その場合は、req.param('foo')を使用します。

変数がルートパラメーター、クエリ文字列、またはエンコードされた要求本文にあったかどうかにかかわらず、パラメーターの値が返されます。

サイドノート-3種類すべての要求パラメーター(PHPの$_REQUESTに類似)の共通部分を取得することを目的としている場合、パラメーターを一緒にマージする必要があります。ここで、I Sails で設定します。パス/ルートパラメータオブジェクト(req.params)には配列プロパティがあるため、順序が重要であることに注意してください(ただし、この はExpress 4で変更される場合があります

450
mikermcneil

Express.jsの場合はreq.paramsを実行します。

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

私は他の答えから学び、私のサイト全体でこのコードを使うことにしました:

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
68
Grant Li

あなたはこのようなことをすることができるはずです:

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")
})
35
RobertPitt
//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"}

})
35
bigboss

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)

34
Steven Spungin

GETメソッドでパラメータを渡す方法は2つあります。

方法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);
29
Omkar Bandkar

2014年5月4日更新  

ここに保存されている古い回答: 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

IDを取得しました:something


(多くのことが私の答えから変わったので、それを最新のものにしておく価値があると思う)

23
Michal Stefanow

ポート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」と入力してコンソールで実行します。

18
adriano72

ホワイトクォークはうまく答えた。しかし、Node.jsとExpress.jsの現在のバージョンではもう1行必要です。必ず「require http」(2行目)を追加してください。この呼び出しがどのように機能するかを示すより完全な例をここに投稿しました。実行したら、ブラウザに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
james d'angelo

それはとても簡単です:

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

13
Saran Pal

Express ^ 4.15.4と一緒に使うことができます。

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

お役に立てれば。

12
ajafik

あなたが使用することができます

request.query.<varible-name>;
11
Yash Bele

express.jsでは、あなたはそれをとても簡単にすることができます、あなたがあなたのコントローラ関数でする必要があるのは、ただです。

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

そしてそれがすべてです、あなたがes6構文を使っていると仮定すれば。

PD {id}は、es6の新機能であるObject destructuringを表します。

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

これを使用するか、リクエストパラメータから特別な要素を解析するためにbody-parserを試すことができます。

2
Mehedi Abdullah

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
Codemaker

Expressでは、単にreq.query.<name>を使うことができます。 PHPの$_GET['name']と同じように動作します。

0
Ankit Singh

私の観点からすると、私は多くの人が2つの異なる概念を混在させていると思います。 REST開発の間、私は2つの方法で "パス変数"と "リクエストパラメータ"(クエリパラメータ)でURLに情報を渡すことに慣れていました。 RFCはこのようにURIの部分を記述しています: ここにリンクの説明を入力してください だから私は作者がリクエストパラメータを渡す方法を知りたがっていることを理解しました。このトピックを理解しやすくすることだけを目的としていますが、その解決策はここで何度も言及されています。

URIからクエリパラメータを取得するにはrequest.query.<name of the parameter>を使用します。2番目の解決策はrequest.params.<name of the parameter>です。これを使用すると、パス変数を取得できます。

0
Peter S.

それは実際には簡単です:

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
Md. A. Barik