Değişkenleri tıpkı $_GET
PHP'de içeriyormuş gibi Node.js'deki sorgu dizesinde alabilir miyiz ?
Node.js'de URL'yi istekte alabileceğimizi biliyorum. Sorgu dizesi parametrelerini almak için bir yöntem var mı?
Değişkenleri tıpkı $_GET
PHP'de içeriyormuş gibi Node.js'deki sorgu dizesinde alabilir miyiz ?
Node.js'de URL'yi istekte alabileceğimizi biliyorum. Sorgu dizesi parametrelerini almak için bir yöntem var mı?
Yanıtlar:
Express'te zaten sizin için yapılır ve bunun için req.query'yi kullanabilirsiniz :
var id = req.query.id; // $_GET["id"]
Aksi takdirde, NodeJS'de req.url ve yerleşik url
modüle [url.parse] ( https://nodejs.org/api/url.html#url_url_parse_urlstring_parsequerystring_slashesdenotehost ) adresinden manuel olarak erişebilirsiniz :
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
veya req.param
(hangisinden farklı req.params
... aşağıya bakın.)
request
ve Express ile ilgisi yoktur. Aşağıdaki @ whitequark'ın cevabına bakınız (kullanım request.query
)
Etiketlerinizde Express.js'den bahsettiğinizden, işte Express'e özgü bir cevap: req.query kullanın . Örneğin
var express = require('express');
var app = express();
app.get('/', function(req, res){
res.send('id: ' + req.query.id);
});
app.listen(3000);
req.query.id
, parantez notasyonu kullanmaya gerek yoktur.
Express'te kullanın req.query
.
req.params
yalnızca rota parametrelerini alır, sorgu dizesi parametrelerini değil. Bkz ekspres veya yelkenler belgelerine:
(req.params) Güzergah parametrelerini kontrol eder, örn: / user /: id
(req.query) Sorgu dizesi parametrelerini denetler, örn .:? id = 12 urlencoded gövde parametrelerini denetler
(req.body), ex: id = 12 Urlencocode istek gövdelerini kullanmak için req.body bir nesne olmalıdır. Bu, _express.bodyParser ara katman yazılımı kullanılarak yapılabilir.
Bununla birlikte, çoğu zaman kaynağından bağımsız olarak bir parametrenin değerini almak istersiniz. Bu durumda, kullanın req.param('foo')
.
Değişkenin rota parametreleri, sorgu dizesi veya kodlanmış istek gövdesinde olması durumunda parametrenin değeri döndürülür.
Yan not - üç tür istek parametresinin (PHP'lere benzer $_REQUEST
) tümünün kesişimini almayı hedefliyorsanız , parametreleri birlikte birleştirmeniz gerekir - işte bunu Sails'te nasıl ayarladığım . Yol / rota parametreleri nesnesinin ( req.params
) dizi özelliklerine sahip olduğunu unutmayın, bu nedenle sipariş önemlidir ( Express 4'te değişse de )
req.params
Sails belgelerinde bir bağlantı vardır : sailsjs.org/#/documentation/reference/req/req.params.html ve yeni hızlı dokümanlar: expressjs.com/4x/api.html#req.params
req.param()
yardımcı işlev Express 5'te tamamen kaldırılacak. Bu, 2017'de bir süre geçene kadar yakın olmayacak, bu yüzden düzenlemek için bekleyeceğim bu cevabı o zamana kadar. Bu arada: Kullanımı güvenlidir req.param()
Express ile <= 3.x / Yelken <= 0.12, ve w / a kullanımdan kaldırılması günlüğüne mesajla olsa Express 4'ün en son sürümü ile. (Sails kullanıcıları için: Sails v1.0'dan itibaren uygulanması req.param()
çekirdek haline gelecek ve gelecekte
Express.js için şunları yapmak istiyorsunuz req.params
:
app.get('/user/:id', function(req, res) {
res.send('user' + req.params.id);
});
Diğer cevaplardan öğrendim ve bu kodu sitem boyunca kullanmaya karar verdim:
var query = require('url').parse(req.url,true).query;
Sonra sadece
var id = query.id;
var option = query.option;
get için URL nerede olmalıdır
/path/filename?id=123&option=456
parse
üzerinde req.url
bir nesneye dönüştürür.
//get query¶ms 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"}
})
ES6 ve Express kullanıyorsanız bu destructuring
yaklaşımı deneyin :
const {id, since, fields, anotherField} = request.query;
Bağlamda:
const express = require('express');
const app = express();
app.get('/', function(req, res){
const {id, since, fields, anotherField} = req.query;
});
app.listen(3000);
Varsayılan değerleri destructuring
de şu şekilde kullanabilirsiniz :
// 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 yöntemi
ile parametreleri iletmenin 2 yolu vardır. Yöntem 1: / routename /: paramname gibi parametreleri ilettiğiniz MVC yaklaşımı
Bu durumda parametre değerini almak için req.params.paramname kullanabilirsiniz. Param
bağlantısı olarak Id bekliyorum : 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);
Yöntem 2: Genel yaklaşım: Değişkenleri sorgu dizesi olarak '?' Operatör
Örneğin, id parametresini sorgu parametre
bağlantısı olarak beklediğim aşağıdaki koda bakın : 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);
Bunun gibi bir şey yapabilmelisiniz:
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")
})
GÜNCELLEME 4 Mayıs 2014
Eski cevap burada korunmuştur: https://gist.github.com/stefek99/b10ed037d2a4a323d638
1) ekspres yükleyin: 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) Uygulamayı çalıştırın: node app.js
3) Tarayıcıyı ziyaret edin: http://localhost:3000/endpoint?id=something
Kimliği aldım: bir şey
(Cevabımdan beri birçok şey değişti ve inanıyorum ki her şeyi güncel tutmaya değer)
9080 numaralı bağlantı noktasını dinleyen, GET veya POST verilerini ayrıştıran ve yanıtın bir parçası olarak istemciye geri gönderen küçük bir Node.js HTTP sunucusu:
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);
Farklı kaydedin parse.js
ve "node parse.js" girerek konsolda çalıştırın.
Whitequark güzel cevap verdi. Ancak Node.js ve Express.js'nin mevcut sürümlerinde bir satır daha gerekiyor. 'Gereken http' (ikinci satır) eklediğinizden emin olun. Bu aramanın nasıl çalışabileceğini gösteren daha dolu bir örnek yayınladım. Çalıştırdıktan sonra http://localhost:8080/?name=abel&fruit=apple
tarayıcınıza yazın , koda göre harika bir yanıt alırsınız.
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'));
})
Çok basit:
Örnek URL:
http://stackoverflow.com:3000/activate_accountid=3&activatekey=$2a$08$jvGevXUOvYxKsiBt.PpMs.zgzD4C/wwTsvjzfUrqLrgS3zXJVfVRK
Sorgu dizesinin tüm değerlerini kullanarak şunları yazdırabilirsiniz:
console.log("All query strings: " + JSON.stringify(req.query));
Çıktı
Tüm sorgu dizeleri: {"id": "3", "activatekey": "$ 2a $ 08 $ jvGevXUOvYxKsiBt.PpMs.zgzD4C / wwTsvjz fUrqLrgS3zXJVfVRK"}
Belirli yazdırmak için:
console.log("activatekey: " + req.query.activatekey);
Çıktı
activatekey: $ 2a $ 08 $ jvGevXUOvYxKsiBt.PpMs.zgzD4C / wwTsvjzfUrqLrgS3zXJVfVRK
Gelen express.js
oldukça kolay elde edebilirsiniz, size denetleyici işlevi yapmanız gereken tek şey:
app.get('/', (req, res, next) => {
const {id} = req.query;
// rest of your code here...
})
Ve hepsi bu, es6 sözdizimi kullandığınızı varsayarsak.
PD. {id}
açılımı Object destructuring
yeni bir ES6 özelliği.
app.get('/user/:id', function(req, res) {
res.send('user' + req.params.id);
});
Bunu kullanabilir veya istek parametrelerinden özel öğeyi ayrıştırmak için gövde ayrıştırıcısını deneyebilirsiniz.
Aslında basit:
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.parse komutunu kullanarak parametreleri toplamak için url modülünü kullanabilirsiniz
var url = require('url');
var url_data = url.parse(request.url, true);
var query = url_data.query;
Ekspreslerde,
var id = req.query.id;
Örneğin:
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
});
Express'te sadece kullanabiliriz req.query.<name>
. $_GET['name']
PHP ile aynı çalışır .
Benim açımdan, birçok insanın iki farklı kavramı karıştırdığını düşünüyorum. REST geliştirme sırasında, URL'de bilgileri iki yolla "yol değişkenleri" ve "istek parametreleri" (sorgu parametreleri) ile aktarmayı öğrendim. RFC URI bu gibi bölümlerini açıklar: bağlantı açıklamasını buraya girin Bu yüzden yazarın istek parametrelerini nasıl geçeceğini bilmek istediğini anladım. Konuyu sadece daha kolay anlaşılır hale getirmek istiyorum, ancak çözüm burada birçok kez belirtildi.
Sorgu parametrelerini URI'den alabilirsiniz request.query.<name of the parameter>
, bahsedilen ikinci çözüm buydu request.params.<name of the parameter>
ve bununla yol değişkenlerini alabilirsiniz.
Yani, bu "id" in alınabilmesinin iki yolu vardır: 1) params kullanarak: kod params gibi bir şeye benzeyecektir: Bir dizimiz var diyelim,
const courses = [{
id: 1,
name: 'Mathematics'
},
{
id: 2,
name: 'History'
}
];
Sonra params için şöyle bir şey yapabiliriz:
app.get('/api/posts/:id',(req,res)=>{
const course = courses.find(o=>o.id == (req.params.id))
res.send(course);
});
2) Başka bir yöntem de sorgu parametrelerini kullanmaktır. bu nedenle url, "..... \ api \ xyz? id = 1" gibi bir şeye benzeyecektir; burada "? id = 1" sorgu kısmıdır. Bu durumda şöyle bir şey yapabiliriz:
app.get('/api/posts',(req,res)=>{
const course = courses.find(o=>o.id == (req.query.id))
res.send(course);
});
var express = require('express');
var app = express();
app.get('/', function(req, res){
res.send('id: ' + req.query.id);
});
app.listen(3000);
Bir seçeneğin yanı sıra bir GET
istek de göndermeniz gerekiyorsa (Diğer yanıtlar bir değişken belirtebileceğinizden bahsetmedi ), bu işlevi kullanabilirsiniz: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);
});
}
Dosyanızın üst kısmında modül istemeyi kaçırmayın:
http = require("http");
url = require('url')
Ayrıca https
, güvenli alanlar ve SSL üzerinden iletişim kurmak için modülü kullanabileceğinizi de unutmayın . yani bu iki çizgi değişecekti:
https = require("https");
...
https.get(url.format(requestUrl), (resp) => { ......
Express@4.16 ile MEANJS 0.6.0 kullanıyorum , iyi
Müşteri:
Denetleyici:
var input = { keyword: vm.keyword };
ProductAPi.getOrder(input)
Hizmetler:
this.getOrder = function (input) {return $http.get('/api/order', { params: input });};
Sunucu
rotalar
app.route('/api/order').get(products.order);
kontrolör
exports.order = function (req, res) {
var keyword = req.query.keyword
...
-------- Sorgu Dizesi Verilerine Erişme -------
Bunun http://webapplog.com/search?term=node.js&page=1 bağlantısı olduğunu varsayalım
Yani ekspres kullanabilirsiniz:
req.query.term
req.query.page
veya req.query
(sorguyu bir Nesneye getirir)
app.get('http://webapplog.com/search?term=node.js&page=1',(req, res)=>{
res.json({term:req.query.term, page:req.query.page})
})
-------- URL Parametrelerine Erişim -------
Bunun http://webapplog.com/node.js/pages/100
bağlantısını olduğunu varsayalım
:
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})
})