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

是否可以像在 PHP 的$_GET中那样在 Node.js 的查询字符串中获取变量?

我知道在 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仅获取路由参数,而不获取查询字符串参数。请参阅快递航行文件:

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

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

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

就是说,在大多数情况下,无论参数的来源如何,您都希望获得其值。在这种情况下,请使用req.param('foo')

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

旁注 - 如果您打算获取所有三种类型的请求参数的交集(类似于 PHP 的$_REQUEST ),则只需将参数合并在一起 - 这就是我在 Sails 中设置的方法 。请记住,路径 / 路线参数对象( 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;

获取网址应在哪里

/path/filename?id=123&option=456
//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"}

})

如果您使用的是ES6Express ,请尝试以下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)

您应该能够执行以下操作:

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:通用方法:使用 “?” 将变量作为查询字符串传递算子
对于示例,请参考下面的代码,其中我希望将 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)安装快递: 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

我已经收到 ID:


(自从我回答以来,很多事情都发生了变化,我相信值得保持最新状态)