节点/快速请求查询

时间:2015-11-29 19:53:42

标签: javascript node.js express

我的端点看起来像这样。

// GET /api/logs/
app.get('/api/logs', function (request, response) {
  if (request.query.reverse === true) {
    response.send((mainModule.logs).reverse());
  }
  else {
    response.send(mainModule.logs);
  }
});

响应是一个对象数组,我希望顺序由查询参数确定反向'布尔值。现在,查询似乎没有做任何事情。我究竟做错了什么?谢谢!

3 个答案:

答案 0 :(得分:4)

Querystring值始终以字符串形式返回,因此您应该检查reverse === 'true'而不是reverse === true。这是因为Express的req.query直接从Node的查询字符串解析器(代码here)中提取。如果在Node中运行以下命令,您将看到结果返回字符串而不是reverse参数的布尔值。

var query = require('querystring').parse('reverse=true');
console.log(query); // returns { reverse: 'true' }

请注意,使用request.query.reverse == true无效。 =====都将返回false。因此,您需要执行== 'true'==='true'

答案 1 :(得分:1)

https://github.com/jackypan1989/express-query-parser

帮助您隐藏所有不明确的字符串值

通常您可以拨打http://localhost/?a=null&b=true&c[d]=false

获取req.query = {a: 'null', b: 'true', c: {d: 'false'}}

此项目将帮助您解析正确的值。

req.query = {a: null, b: true, c: {d: false}}

答案 2 :(得分:0)

做一个

 console.log(typeof request.query.reverse );

我认为它是一个字符串,但您正在检查该值是否与布尔值匹配且为真。将值解析为boolean或执行

if (request.query.reverse == true)