[expressjs/express]req.query 返回的不是对象,是getQuery函数

2024-07-04 825 views
0

官方文档是这么说的,req.query,这个属性是一个对象,里面包含了路由中每一个查询字符串参数的属性,如果没有查询字符串,就是空对象,{}。

当我运行我的应用程序时,

app.use(function(req, res, next) {
     req.query 
    console.log(req.query); // undefined
    console.log(req.query()); // "a=3&b=2"
     next();
});

那么 req.query 是一个名为 getQuery() 的函数,而不是一个对象,为什么?我的 Express 版本是 4.16.2。

我找到了问题的原因,因为需要'bpmn'包。这是我的测试代码:

const express = require('express'); const http = require('http'); const bpmn = require('bpmn');

让 app = express(); app.use(function(req, res, next) { console.log(req.query); //[函数:getQuery] next(); }); http.createServer(app).listen(8888, '0.0.0.0');

//node V8.9.0 //依赖项:“bpmn”:“^0.2.2”,“express”:“^4.16.2”

回答

9

嘿,你的问题是什么?请具体说明你的主题。我不明白你在问什么{req.query}

7

@Muthukumars1994 抱歉,我已更改了我的问题

3

从我的角度看 -->

req.query = {}  ==> It's a bundled   Object  with req Params
function (req, res) {
   console.log(req)
  console.log(typeof(req.query));  ==> it is a object not a function
   console.log(req.query()) ==>  what you are trying to do with That 
}
7

'req.query' 之前很好。我的项目在升级 Express 到 4.16.2 时出现问题,升级后 'req.query' 是一个函数,它不是与 req 参数捆绑在一起的对象。

2

您好@czjs2 最近没有任何变化req.query,我们的测试套件显示它正如您所期望的那样运行。您的应用中可能存在导致此问题的原因,我们需要更多信息才能提供帮助。请提供以下所有信息:

  1. 您正在使用的 Express 版本。
  2. 您正在使用的 Ndoe.js 版本。
  3. 出现问题的整个应用程序的完整源代码,以便我们可以重现该问题。
  4. 有关如何运行应用程序以及如何查看问题的完整说明。

谢谢你!

9

@dougwilson 我找到了问题的原因,因为需要'bpmn'包。这是我的测试代码:

const express = require('express'); const http = require('http'); const bpmn = require('bpmn');

让 app = express(); app.use(function(req, res, next) { console.log(req.query); //[函数:getQuery] next(); }); http.createServer(app).listen(8888, '0.0.0.0');

//node V8.9.0 //依赖项:“bpmn”:“^0.2.2”,“express”:“^4.16.2”

1

追溯一下,request.query无论如何,BPMN 包都依赖于 Restify 和 Restify clobbers;这是确切的行

该问题是 Restify 的问题,已在Restify:#1540中提出。这不是 Express 的问题。这也可能是您在 BPMN 中提出的问题,但鉴于 BPMN 项目已经沉寂了一年多,我个人建议您谨慎使用它,除非您准备对其进行维护。

2

@crdrost 非常感谢!

1

我认为我们无法在此模块中对此采取任何措施,还有其他人知道吗?如果我们撤消 Restify 所做的全局修改,那么只会破坏 Restify。

6

@dougwilson 作为一个偶然参与这次谈话的人,这是我的看法,是的:我会说将这个问题关闭,因为“这不是我们的问题”。