අපි $_GET
PHP තුළට ඇතුල් වනවා සේම, Node.js හි විමසුම් දාමයේ විචල්යයන් ලබා ගත හැකිද ?
Node.js හි අපට ඉල්ලීමෙහි URL ලබා ගත හැකි බව මම දනිමි. විමසුම් නූල් පරාමිතීන් ලබා ගැනීමට ක්රමයක් තිබේද?
අපි $_GET
PHP තුළට ඇතුල් වනවා සේම, Node.js හි විමසුම් දාමයේ විචල්යයන් ලබා ගත හැකිද ?
Node.js හි අපට ඉල්ලීමෙහි URL ලබා ගත හැකි බව මම දනිමි. විමසුම් නූල් පරාමිතීන් ලබා ගැනීමට ක්රමයක් තිබේද?
Answers:
එක්ස්ප්රස් හි එය දැනටමත් ඔබ වෙනුවෙන් කර ඇති අතර ඒ සඳහා ඔබට req.query භාවිතා කළ හැකිය :
var id = req.query.id; // $_GET["id"]
එසේ නොමැතිනම්, NodeJS හි, ඔබට [url.parse] ( https://nodejs.org/api/url.html#url_url_parse_urlstring_parcomingerystring_slashesdenotehost ) වෙත req.url සහ බිල්ඩින්url
මොඩියුලය වෙත පිවිසිය හැකිය :
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
කර ඇත්තේ වස්තුවක නම් වන අතර එක්ස්ප්රස් සමඟ කිසිදු සම්බන්ධයක් නැත. පහත @ වයිට්කාර්ක්ගේ පිළිතුර බලන්න (භාවිතා කරන්න 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
ලැබෙන්නේ මාර්ග පරාමිතීන් මිස විමසුම් නූල් පරාමිතීන් නොවේ. සී express ්රගාමී හෝ රුවල් ප්රලේඛනය බලන්න:
(req.params) මාර්ග පරාමිතීන් පරික්ෂා කරයි, උදා: / user /: id
(req.query) විමසුම් වචන පරාමිතීන් පරික්ෂා කරයි, උදා :? id = 12 මුත්රා කේත කරන ලද ශරීර පරාමිතීන් පරීක්ෂා කරයි
(req.body), උදා: id = 12 urlencoded ඉල්ලීම් සිරුරු භාවිතා කිරීමට, req.body වස්තුවක් විය යුතුය. _Express.bodyParser මිඩ්ල්වෙයාර් භාවිතා කිරීමෙන් මෙය කළ හැකිය.
එයින් කියැවෙන්නේ, බොහෝ විට, පරාමිතියක ප්රභවය නොසලකා එහි වටිනාකම ලබා ගැනීමට ඔබට අවශ්ය බවය. එවැනි අවස්ථාවක, භාවිතා කරන්නreq.param('foo')
.
විචල්යය මාර්ග පරාමිතීන්, විමසුම් නූල හෝ කේතනය කළ ඉල්ලීම් ශරීරය තුළ තිබේද යන්න පරාමිතියේ වටිනාකම ආපසු ලබා දෙනු ඇත.
පැති සටහන- ඔබ ඉල්ලීම් පරාමිති තුනේම ඡේදනය (PHP වලට සමාන $_REQUEST
) ලබා ගැනීමට අදහස් කරන්නේ නම්, ඔබට අවශ්ය වන්නේ පරාමිතීන් එකට ඒකාබද්ධ කිරීමයි - මෙන්න මම එය රුවල් වල පිහිටුවා ගත් ආකාරයයි . මාර්ගය / මාර්ග පරාමිති වස්තුවට ( req.params
) අරා ගුණාංග ඇති බව මතක තබා ගන්න , එබැවින් කාරණා ඇණවුම් කරන්න (මෙය එක්ස්ප්රස් 4 හි වෙනස් විය හැකි වුවද )
req.params
සේල්ස් ලියකියවිලි වලට සබැඳියක් ඇත : sailsjs.org/#/documentation/reference/req/req.params.html සහ නව සී express ්රගාමී ලියකියවිලි
req.param()
ක්රියාකාරිත්වය එක්ස්ප්රස් 5 හි සම්පූර්ණයෙන්ම ඉවත් කිරීමට ඉඩ ඇත. මේ පිළිතුර එතෙක්. මධ්යන්ය කාලය තුළ: req.param()
එක්ස්ප්රස් <= 3.x / සේල්ස් <= 0.12 සමඟ භාවිතා කිරීම ආරක්ෂිතයි , සහ එක්ස්ප්රස් 4 හි නවතම නිකුතුව සමඟ w / අවලංගු කිරීමේ ලොග් පණිවිඩයක් වුවද. (රුවල් භාවිතා කරන්නන් සඳහා: ක්රියාත්මක කිරීම req.param()
සේල්ස් v1.0 වන විට හරය කරා ගමන් කරනු ඇති අතර අනාගතයේ දී එය සේල්ස් හි පූර්ණ සහාය ලබා දෙනු ඇත.)
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)
ලබා ගන්න ක්රමය හරහා පරාමිති යැවීමට 2 ආකාරයන් ඇත
ඔබ / වැනි / routename පරාමිතීන් සම්මත එහිදී මෙම MVC ප්රවේශය:: 1 වැනි ක්රමය paramname
මෙම අවස්ථාවේ දී ඔබ කොහේද මම උදාහරණයක් ලෙස, පරාමිතිය අගය පහත දැක්වෙන කෝඩ් යොමු කර ගැනීමට 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/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
මට හැඳුනුම්පත ලැබී ඇත: යමක්
(මගේ පිළිතුරෙන් පසු බොහෝ දේ වෙනස් වී ඇති අතර දේවල් යාවත්කාලීනව තබා ගැනීම වටී යැයි මම විශ්වාස කරමි)
කුඩා 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 හි වර්තමාන අනුවාදයන් සමඟ එයට තවත් එක් පේළියක් අවශ්ය වේ. 'අවශ්ය 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", "activatekey": "a 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 සින්ටැක්ස් භාවිතා කරන බව උපකල්පනය කරන්න.
පී.ඩී. {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 වෙතින් විමසුම් පරාමිතීන් ලබා ගත හැකිය request.query.<name of the parameter>
, දෙවන සඳහන් විසඳුම වූ request.params.<name of the parameter>
අතර මේ සමඟ ඔබට මාර්ග විචල්යයන් ලබා ගත හැකිය.
එබැවින්, මෙම "හැඳුනුම්පත" ලබා ගත හැකි ආකාර දෙකක් තිබේ: 1) පරාමිතීන් භාවිතා කිරීම: කේත පරාමිතීන් සමාන වනු ඇත: අපට අරාවක් ඇති බව පවසන්න,
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) => { ......
මම 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
...
-------- විමසුම් වචන දත්ත වෙත ප්රවේශ වීම -------
මෙය http://webapplog.com/search?term=node.js&page=1 සබැඳිය යැයි සිතමු.
එබැවින් සී express ්රයෙන් ඔබට භාවිතා කළ හැකිය:
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})
})