如何在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¶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"} })
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')); })
如果您使用的是ES6和Express ,请尝试以下方法:
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); });
希望这有助于…干杯,