How to get GET (query string) variables in Express.js on Node.js?
我们能在node.js中获取查询字符串中的变量吗,就像在php中获取
我知道在node.js中,我们可以在请求中获取URL。是否有获取查询字符串参数的方法?
由于您在标记中提到了express.js,这里有一个特定于express的答案:use req.query。例如。
1 2 3 4 5 6 7 8 | var express = require('express'); var app = express(); app.get('/', function(req, res){ res.send('id: ' + req.query.id); }); app.listen(3000); |
在Express中,它已经为您完成了,您只需使用req.query:
1 | var id = req.query.id; // $_GET["id"] |
否则,在nodejs中,您可以访问req.url和内置的
1 2 3 | var url = require('url'); var url_parts = url.parse(request.url, true); var query = url_parts.query; |
在Express中,使用
(req.params) Checks route params, ex: /user/:id
(req.query) Checks query string params, ex: ?id=12 Checks urlencoded body params
(req.body), ex: id=12 To utilize urlencoded request bodies, req.body should be an object. This can be done by using the _express.bodyParser middleware.
也就是说,大多数情况下,无论参数的来源如何,您都希望得到它的值。在这种情况下,使用
无论变量在路由参数、查询字符串或编码的请求正文中,都将返回参数的值。
侧注-如果您的目标是获得所有三种类型的请求参数的交集(类似于PHP的
对于express.js,您希望执行
1 2 3 | app.get('/user/:id', function(req, res) { res.send('user' + req.params.id); }); |
我从其他答案中学习并决定在我的站点中使用此代码:
1 | var query = require('url').parse(req.url,true).query; |
然后你可以打电话
1 2 | var id = query.id; var option = query.option; |
GET的URL应该在哪里
1 | /path/filename?id=123&option=456 |
1 2 3 4 5 6 7 8 9 10 11 | //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"} }) |
您应该能够这样做:
1 2 3 4 5 6 7 8 9 10 11 | 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") }) |
如果您使用的是ES6和Express,请尝试此
1 | const {id, since, fields, anotherField} = request.query; |
在上下文中:
1 2 3 4 5 6 7 8 | const express = require('express'); const app = express(); app.get('/', function(req, res){ const {id, since, fields, anotherField} = req.query; }); app.listen(3000); |
您也可以在
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // 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方法传递参数
方法1:传递参数的MVC方法,如/routename/:paramname
在这种情况下,您可以使用req.params.paramname来获取参数值,例如,请参阅下面的代码,其中我希望ID作为参数
链接可能如下:http://myhost.com/items/23
1 2 3 4 5 6 7 | 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:常规方法:使用'?'将变量作为查询字符串传递操作员< BR>例如,请参阅下面的代码,其中我期望ID作为查询参数
链接可以是:http://myhost.com/items?ID=23
1 2 3 4 5 6 7 | 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)安装快捷:
App.JS
1 2 3 4 5 6 7 8 9 10 | 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)运行app:
3)在浏览器中访问:
I have received the ID: something
(自从我的答案以来,很多事情都发生了变化,我相信这值得保持最新的信息)
在端口9080上侦听、解析get或post数据并将其作为响应的一部分发送回客户端的small node.js HTTP服务器是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | 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); |
另存为
白夸克的反应很好。但是对于node.js和express.js的当前版本,它还需要一行代码。确保添加"需要HTTP"(第二行)。我在这里发布了一个更完整的示例,说明这个调用如何工作。运行后,在浏览器中键入
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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 + ' '); res.write('fruit: ' + req.query.fruit + ' '); res.write('query: ' + req.query + ' '); queryStuff = JSON.stringify(req.query); res.end('That\'s all folks' + ' ' + queryStuff); }); http.createServer(app).listen(app.get('port'), function(){ console.log("Express server listening on port" + app.get('port')); }) |
这很简单:
示例网址:
1 | http://stackoverflow.com:3000/activate_accountid=3&activatekey=$2a$08$jvGevXUOvYxKsiBt.PpMs.zgzD4C/wwTsvjzfUrqLrgS3zXJVfVRK |
可以使用以下方法打印查询字符串的所有值:
1 | console.log("All query strings:" + JSON.stringify(req.query)); |
产量
All query strings : {"id":"3","activatekey":"$2a$08$jvGevXUOvYxKsiBt.PpMs.zgzD4C/wwTsvjz
fUrqLrgS3zXJVfVRK"}
打印特定:
1 | console.log("activatekey:" + req.query.activatekey); |
产量
activatekey: $2a$08$jvGevXUOvYxKsiBt.PpMs.zgzD4C/wwTsvjzfUrqLrgS3zXJVfVRK
您可以使用Express ^4.15.4:
1 2 3 4 5 | var express = require('express'), router = express.Router(); router.get('/', function (req, res, next) { console.log(req.query); }); |
希望这有帮助。
你可以使用
1 | request.query.<varible-name>; |
在
1 2 3 4 | app.get('/', (req, res, next) => { const {id} = req.query; // rest of your code here... }) |
仅此而已,假设您使用ES6语法。
钯。
1 2 3 | app.get('/user/:id', function(req, res) { res.send('user' + req.params.id); }); |
您可以使用它,也可以尝试使用body解析器来解析请求参数中的特殊元素。
从我的观点来看,我认为许多人混合了两个不同的概念。在REST开发期间,我熟悉使用"路径变量"和"请求参数"(查询参数)两种方式在URL中传递信息。RFC这样描述了URI的各个部分:在这里输入链接描述,这样我就了解了作者想知道如何传递请求参数。我只想让这个话题更容易理解,但这里已经多次提到了解决方案。
您可以使用
可以使用url模块通过url.parse收集参数。
1 2 3 | var url = require('url'); var url_data = url.parse(request.url, true); var query = url_data.query; |
在ExpressJ中,
1 | var id = req.query.id; |
如:
1 2 3 4 5 6 7 | 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 }); |
我用meanjs 0.6.0和[email protected],很好
客户:
控制器:
1 2 | var input = { keyword: vm.keyword }; ProductAPi.getOrder(input) |
服务:
1 | this.getOrder = function (input) {return $http.get('/api/order', { params: input });}; |
服务器
路线
1 | app.route('/api/order').get(products.order); |
控制器
1 2 3 | exports.order = function (req, res) { var keyword = req.query.keyword ... |
在Express中,我们可以简单地使用
--------访问查询字符串数据-------假设这是链接http://webapplog.com/search?term=node.js&page=1
因此,在Express中,您可以使用:
req.query.term req.query.page 或req.query (它将在对象中提取查询)
BR/>[例证] BR/>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因此,在Express中,您可以使用:
req.params.term req.params.page [例证] BR/>
app.get('http://webapplog.com/:term/pages/:page',(req, res)=>{
res.json({term:req.params.term, page:req.params.page})
})