$_GET
PHPで変数を取得するのと同じように、Node.jsでクエリ文字列の変数を取得できますか?
Node.jsではリクエストでURLを取得できることを知っています。クエリ文字列パラメーターを取得するメソッドはありますか?
$_GET
PHPで変数を取得するのと同じように、Node.jsでクエリ文字列の変数を取得できますか?
Node.jsではリクエストでURLを取得できることを知っています。クエリ文字列パラメーターを取得するメソッドはありますか?
回答:
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;
url.parse(urlStr, [parseQueryString], [slashesDenoteHost])
req.query
req.query
またはreq.param
(とは異なっているreq.params
...以下を参照してください。
request
にあり、Expressとは関係ありません。以下の@whitequarkの回答を参照してください(使用request.query
)
タグでExpress.jsについて説明したので、Express固有の回答を次に示します。req.queryを使用します。例えば
var express = require('express');
var app = express();
app.get('/', function(req, res){
res.send('id: ' + req.query.id);
});
app.listen(3000);
req.query.id
を使用する必要があることに言及する価値があります。ブラケット表記を使用する必要はありません。
Expressでは、を使用しますreq.query
。
req.params
ルートパラメータのみを取得し、クエリ文字列パラメータは取得しません。エクスプレスまたは帆のドキュメントを参照してください。
(req.params)ルートパラメータをチェックします。例:/ user /:id
(req.query)クエリ文字列のパラメーターをチェックします。例:?id = 12 urlencoded body paramsをチェックします
(req.body)、例:id = 12 URLエンコードされたリクエスト本文を利用するには、req.bodyがオブジェクトである必要があります。これは、_express.bodyParserミドルウェアを使用して行うことができます。
つまり、ほとんどの場合、ソースに関係なくパラメータの値を取得する必要があります。その場合は、req.param('foo')
。
パラメータの値は、変数がルートパラメータ、クエリ文字列、またはエンコードされたリクエスト本文に含まれていたかどうかにかかわらず返されます。
補足:3つのタイプの要求パラメーターすべて(PHPと同様$_REQUEST
)の共通部分を取得することを目的としている場合は、パラメーターをマージする必要があるだけです。これがSailsで設定する方法です。パス/ルートパラメータオブジェクト(req.params
)には配列プロパティがあるため、順序が重要であることに注意してください(これはExpress 4で変更される可能性があります)
req.param()
ヘルパー機能はExpress 5で完全に削除される可能性があります。これは2017年の後半まで差し迫っていないので、編集するのを待ちますそれまではこの答え。それまでの間:req.param()
Express <= 3.x / Sails <= 0.12で、そして Express 4の最新の利用可能なリリースでは、非推奨のログメッセージが表示されますが、安全に使用できます。(Sailsユーザーの場合:の実装はreq.param()
、Sails v1.0の時点でコアに移行し、将来的にはSailsで完全にサポートされる予定です。)
あなたがしたいExpress.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;
getのURLは
/path/filename?id=123&option=456
parse
にreq.url
オブジェクトに変換します。
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)
GETメソッドを介してパラメータを渡すには2つの方法があり
ますが、/ routename /のようにパラメータを渡すMVCのアプローチ:方法1のparamName
ます。たとえば、パラメータ値を取得するためにreq.params.paramnameを使用することができます。この場合は、コード以下を参照しているI 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);
更新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を受け取りました:何か
(私の答え以来多くのことが変わった、そして私は物事を最新に保つ価値があると信じています)
小さな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」と入力してコンソールで実行します。
ホワイトクォークはうまく反応した。しかし、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'));
})
それはとても簡単です:
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
でexpress.js
あなたはかなり簡単にそれを得ることができ、あなたのコントローラ機能に必要なことは、次のとおりです。
app.get('/', (req, res, next) => {
const {id} = req.query;
// rest of your code here...
})
そして、es6構文を使用していると仮定すると、これですべてです。
PD。{id}
はObject destructuring
、新しいes6機能のを表します。
app.get('/user/:id', function(req, res) {
res.send('user' + req.params.id);
});
これを使用するか、リクエストパラメータから特別な要素を解析するためにbody-parserを試すことができます。
それは実際には簡単です:
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
urlモジュールを使用して、url.parseを使用してパラメーターを収集できます。
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
});
私の見解では、多くの人が2つの異なる概念を混ぜ合わせていると思います。REST開発中、私は「パス変数」と「リクエストパラメータ」(クエリパラメータ)の2つの方法でURLに情報を渡すことに慣れていました。RFCは、このようなURIの部分を説明しています。ここにリンクの説明を入力してくださいリクエストパラメータを渡す方法を著者が知りたいことを理解しました。トピックをわかりやすくしたいだけですが、解決策はここで何度も言及されました。
を使用してURIからクエリパラメータを取得できますrequest.query.<name of the parameter>
。2番目に言及された解決策はrequest.params.<name of the parameter>
、これを使用してパス変数を取得できます。
したがって、この「id」を受け取る方法は2つあります。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);
});
と同様ににGET
リクエストを送信する必要がある場合(他の回答では変数を指定できることについて言及していません)、この関数を利用できます:IP
Domain
port
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を介して通信するためにモジュールを使用する場合があることも覚えておいてください。したがって、次の2行が変更されます。
https = require("https");
...
https.get(url.format(requestUrl), (resp) => { ......
MEANJS 0.6.0をexpress@4.16で使用しています。
クライアント:
コントローラ:
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
...
--------クエリ文字列データへのアクセス-------
これがリンク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})
})