协慌网

登录 贡献 社区

如何在 Node.js 上的 Express.js 中获取 GET(查询字符串)变量?

我们可以在 Node.js 中的查询字符串中获取变量,就像我们在 PHP 中的$_GET中获取它们一样吗?

我知道在 Node.js 中我们可以在请求中获取 URL。有没有获取查询字符串参数的方法?

答案

由于您在标签中提到了 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

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

否则,在NodeJS 中 ,您可以手动访问req.url和内置url模块到 [url.parse]( https://nodejs.org/api/url.html#url_url_parse_urlstring_parsequerystring_slashesdenotehost ):

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

在 Express 中,使用req.query

req.params只获取路由参数,而不是查询字符串参数。查看expresssails文档:

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

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

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

也就是说,大多数情况下,您希望获得参数的值,而不管其来源。在这种情况下,请使用req.param('foo')

无论变量是在路由参数,查询字符串还是编码的请求主体中,都将返回参数的值。

旁注 - 如果你的目标是得到所有三种类型的请求参数的交集(类似于 PHP 的$_REQUEST ),你只需要将参数合并在一起 - 这就是我在 Sails 中设置它的方法 。请记住,路径 / 路由参数对象( req.params )具有数组属性,因此顺序很重要(尽管在 Express 4 中可能会有所改变