क्या हम Node.js में क्वेरी स्ट्रिंग में वैरिएबल प्राप्त कर सकते हैं जैसे हम उन्हें $_GETPHP में प्राप्त करते हैं ?
मुझे पता है कि Node.js में हम अनुरोध में URL प्राप्त कर सकते हैं। क्या क्वेरी स्ट्रिंग पैरामीटर प्राप्त करने की कोई विधि है?
क्या हम Node.js में क्वेरी स्ट्रिंग में वैरिएबल प्राप्त कर सकते हैं जैसे हम उन्हें $_GETPHP में प्राप्त करते हैं ?
मुझे पता है कि Node.js में हम अनुरोध में URL प्राप्त कर सकते हैं। क्या क्वेरी स्ट्रिंग पैरामीटर प्राप्त करने की कोई विधि है?
जवाबों:
एक्सप्रेस में यह आपके लिए पहले से ही है और आप बस इसके लिए req.query का उपयोग कर सकते हैं :
var id = req.query.id; // $_GET["id"]
अन्यथा, NodeJS में, आप req.url और बिल्टिनurl मॉड्यूल को [url.parse] ( https://nodejs.org/api/url.html#url_url_parse_urlster_parftererystring_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और इसका एक्सप्रेस से कोई लेना-देना नहीं है। नीचे @ whitequark का उत्तर देखें (उपयोग करें request.query)
चूंकि आपने अपने टैग में Express.js का उल्लेख किया है, इसलिए यहां एक एक्सप्रेस-विशिष्ट उत्तर है: 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, ब्रैकेट नोटेशन का उपयोग करने की आवश्यकता नहीं है।
एक्सप्रेस में, उपयोग करें req.query।
req.paramsकेवल रूट पैरामीटर मिलता है, क्वेरी स्ट्रिंग पैरामीटर नहीं। एक्सप्रेस या पाल दस्तावेज देखें :
(req.params) चेक मार्ग मार्ग, पूर्व: / उपयोगकर्ता /: आईडी
(req.query) क्वेरी स्ट्रिंग स्ट्रिंग params, उदा: id? 12 = urlencoded body params चेक करता है
(req.body), उदा: id = 12 urlencoded अनुरोध निकायों का उपयोग करने के लिए, req.body एक ऑब्जेक्ट होना चाहिए। यह _express.bodyParser मिडलवेयर का उपयोग करके किया जा सकता है।
उस ने कहा, ज्यादातर समय, आप इसके स्रोत के बावजूद एक पैरामीटर का मूल्य प्राप्त करना चाहते हैं। उस मामले में, का उपयोग करें req.param('foo')।
पैरामीटर का मान लौटाया जाएगा कि क्या चर मार्ग पैरामीटर, क्वेरी स्ट्रिंग या एन्कोडेड अनुरोध निकाय में था।
साइड नोट- यदि आप तीनों प्रकार के अनुरोध पैरामीटर (PHP के समान $_REQUEST) के चौराहे को प्राप्त करने का लक्ष्य बना रहे हैं , तो आपको बस मापदंडों को एक साथ मिलाने की आवश्यकता है- यहाँ बताया गया है कि कैसे मैंने इसे Sails में सेट किया है । ध्यान रखें कि पथ / मार्ग पैरामीटर ऑब्जेक्ट ( req.params) में सरणी गुण हैं, इसलिए ऑर्डर मायने रखता है (हालांकि यह एक्सप्रेस 4 में बदल सकता है )
req.params: पाल डॉक्स में sailsjs.org/#/documentation/reference/req/req.params.html और नई एक्सप्रेस डॉक्स: expressjs.com/4x/api.html#req.params
req.param()फंक्शन को एक्सप्रेस 5 में पूरी तरह से हटा दिए जाने की संभावना है। यह 2017 में कुछ समय बाद तक आसन्न नहीं होगा, इसलिए मैं संपादित करने का इंतजार करूंगा यह जवाब तब तक। औसत समय में: req.param()एक्सप्रेस <= 3.x / Sails <= 0.12 के साथ उपयोग करना सुरक्षित है , और एक्सप्रेस 4 के नवीनतम उपलब्ध रिलीज के साथ, w / पदावनत लॉग संदेश। (Sails उपयोगकर्ताओं के लिए: का कार्यान्वयन req.param()
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;
जहां पाने के लिए 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)
जीईटी
विधि 1 के माध्यम से मापदंडों को पारित करने के 2 तरीके हैं : एमवीसी दृष्टिकोण जहां आप मापदंडों को पास करते हैं जैसे / रूनाम / /: पैरामनाम
इस मामले में आप पैरामीटर मान प्राप्त करने के लिए req.params.paramname का उपयोग कर सकते हैं। उदाहरण के लिए कोड का संदर्भ लें जहां मैं मुझे उम्मीद है कि ईद एक परम
कड़ी के रूप में हो सकती है: 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: सामान्य दृष्टिकोण: ''? ऑपरेटर
उदाहरण के लिए नीचे दिए गए कोड का संदर्भ दें जहां मैं ईद की उम्मीद कर रहा हूं एक क्वेरी पैरामीटर
लिंक की तरह हो सकता है: 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);
आपको ऐसा कुछ करने में सक्षम होना चाहिए:
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")
})
अद्यतन 4 मई 2014
पुराना उत्तर यहां संरक्षित है: https://gist.github.com/stefek99/b10ed037d2a4a326dd38
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
मुझे आईडी मिली है: कुछ
(मेरे उत्तर से कई चीजें बदल गई हैं और मेरा मानना है कि यह चीजों को अद्यतन रखने के लायक है)
एक छोटा सा 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.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'));
})
यह बहुत आसान है:
उदाहरण 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", "सक्रियक": "$ 2a $ 08 $ jvGevXUOvYxKsiBt.PpMs.zgzD4C / wwTsvsz fUrqLrgS3zXJVfVRK"}
विशिष्ट प्रिंट करने के लिए:
console.log("activatekey: " + req.query.activatekey);
उत्पादन
सक्रिय करें: $ 2a $ 08 $ jvGevXUOvYxKsiBt.PpMs.zgzD4C / wwTsvjzfUrqLrgS3zXJVfVKK
में express.jsआप यह बहुत आसान हो सकता है, सब आप अपने नियंत्रक समारोह में क्या करने की जरूरत है:
app.get('/', (req, res, next) => {
const {id} = req.query;
// rest of your code here...
})
और यह सब, आप संभालने के es6 वाक्यविन्यास का उपयोग कर रहे हैं।
पीडी। {id}के लिए खड़ा है Object destructuring, एक नई es6 सुविधा।
app.get('/user/:id', function(req, res) {
res.send('user' + req.params.id);
});
आप इसका उपयोग कर सकते हैं या आप अनुरोध पैरामीटर से विशेष तत्व को पार्स करने के लिए बॉडी-पार्सर की कोशिश कर सकते हैं।
यह वास्तव में सरल है:
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 का उपयोग करके मापदंडों को इकट्ठा करने के लिए url मॉड्यूल का उपयोग कर सकते हैं
var url = require('url');
var url_data = url.parse(request.url, true);
var query = url_data.query;
इसके द्वारा किए गए एक्सप्रेस में,
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
});
एक्सप्रेस में, हम बस का उपयोग कर सकते हैं req.query.<name>। यह $_GET['name']PHP के समान ही काम करता है ।
अपने दृष्टिकोण से मुझे लगता है कि कई लोग दो अलग-अलग अवधारणाओं को मिलाते हैं। REST विकास के दौरान मैं URL में दो तरीकों "पथ चर" और "अनुरोध पैरामीटर" (क्वेरी पैरामीटर) के साथ जानकारी से परिचित था। RFC ने URI के हिस्सों का वर्णन इस तरह किया है: लिंक विवरण यहां दर्ज करें तो मैं समझ गया कि लेखक यह जानना चाहेंगे कि अनुरोध पैरामीटर कैसे पारित करें। मैं केवल विषय को समझना आसान बनाना चाहता हूं, लेकिन समाधान का उल्लेख यहां कई बार किया गया था।
आप URI से क्वेरी पैरामीटर प्राप्त कर सकते हैं request.query.<name of the parameter>, दूसरा उल्लेखित समाधान था request.params.<name of the parameter>और इसके साथ आप पथ चर प्राप्त कर सकते हैं।
तो, दो तरीकों से यह "आईडी" प्राप्त किया जा सकता है: 1) परम का उपयोग करते हुए: कोड params कुछ इस तरह दिखाई देगा: कहें कि हमारे पास एक सरणी है;
const courses = [{
id: 1,
name: 'Mathematics'
},
{
id: 2,
name: 'History'
}
];
तो फिर परम के लिए हम कुछ ऐसा कर सकते हैं:
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);
});
var express = require('express');
var app = express();
app.get('/', function(req, res){
res.send('id: ' + req.query.id);
});
app.listen(3000);
यदि आपको कभी भी 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सुरक्षित डोमेन और एसएसएल पर संचार के लिए मॉड्यूल का उपयोग कर सकते हैं । इसलिए ये दो लाइनें बदल जाएंगी:
https = require("https");
...
https.get(url.format(requestUrl), (resp) => { ......
मैं एक्सप्रेस ०.४.१६ के साथ ०.१.० मीन्स का उपयोग कर रहा हूं, यह अच्छा है
ग्राहक:
नियंत्रक:
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.termreq.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.termreq.params.pageapp.get('http://webapplog.com/:term/pages/:page',(req, res)=>{
res.json({term:req.params.term, page:req.params.page})
})