如何在Node.js的Express.js中获取GET(查询string)variables?

我们可以在Node.js的查询string中获取variables,就像我们在PHP中的$_GET中获取它们一样吗?

我知道在Node.js中,我们可以在请求中获取URL。 有没有一种方法来获取查询string参数?

是的,您可以访问req.url并手动parsing它:

 var url = require('url'); var url_parts = url.parse(request.url, true); var query = url_parts.query; 

然而,在expressjs中它已经为你完成了,你可以简单地使用req.query :

 var id = req.query.id; // $_GET["id"] 

既然你已经在你的标签中提到了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); 

在Express中,使用req.query

req.params只获取路由参数,而不是查询string参数。 查看快递或航行文件:

(req.params)检查路由参数,例如:/ user /:id

(req.query)检查查询string参数,例如:?id = 12检查urlencoded body params

(req.body),例如:id = 12要使用urlencoded请求体,req.body应该是一个对象。 这可以通过使用_express.bodyParser中间件来完成。

也就是说,大多数情况下,你想得到一个参数的值,而不pipe它的来源。 在这种情况下,使用req.param('foo')

无论variables是在路由参数,查询string还是编码请求主体中,都会返回参数的值。

注意 – 如果你的目标是获得所有三种types的请求参数(类似于PHP的$_REQUEST )的交集,你只需要将这些参数合并在一起 – 这是我如何在Sails中设置的 。 请记住,path/path参数对象( req.params )具有数组属性,所以顺序很重要(虽然Express 4中可能会更改 )

对于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 

你应该可以做这样的事情:

 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") }) 

有两种方法可以通过GET方法传递参数

方法1:MVC方法,你传递参数/ routename /:paramname
在这种情况下,您可以使用req.params.paramname来获取参数值。例如,参考下面的代码,我期待Id作为参数
链接可能是这样的: 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:一般方法:使用'?'作为查询string传递variables 操作者
例如,请参阅下面的代码,我期待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)运行app: node app.js

3)在浏览器中访问: http://localhost:3000/endpoint?id=something

我收到了ID:某事


(自从我的回答以来,很多事情都发生了变化,我认为值得保持更新)

一个监听端口9080的小型Node.js HTTP服务器,parsingGET或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 ,并通过input“node parse.js”在控制台上运行它。

 //get query&params 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"} }) 

Whitequark反应很好。 但是对于当前版本的Node.js和Express.js,它需要多一行。 确保添加'require http'(第二行)。 我已经发布了一个更完整的例子,展示了这个调用是如何工作的。 一旦运行,在浏览器中inputhttp://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')); }) 

如果您使用的是ES6Express ,请尝试以下方法:

 const express = require('express'); const app = express(); app.get('/', function(req, res){ const {id, since, fields, anotherField} = req.query; }); app.listen(3000); 

这很简单:

示例url:

 http://stackoverflow.com:3000/activate_accountid=3&activatekey=$2a$08$jvGevXUOvYxKsiBt.PpMs.zgzD4C/wwTsvjzfUrqLrgS3zXJVfVRK 

您可以使用以下命令打印查询string的所有值:

 console.log("All query strings: " + JSON.stringify(req.query)); 

产量

所有查询string:{“id”:“3”,“activatekey”:“$ 2a $ 08 $ jvGevXUOvYxKsiBt.PpMs.zgzD4C / wwTsvjz fUrqLrgS3zXJVfVRK”}

打印具体:

 console.log("activatekey: " + req.query.activatekey); 

产量

activatekey:$ 2a $ 08 $ jvGevXUOvYxKsiBt.PpMs.zgzD4C / wwTsvjzfUrqLrgS3zXJVfVRK

您可以使用

 request.query.<varible-name>; 

您可以使用express ^ 4.15.4:

 var express = require('express'), router = express.Router(); outer.get('/', function (req, res, next) { console.log(req.query); }); 

希望这有助于…干杯,