我的端点看起来像这样。
// 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);
}
});
响应是一个对象数组,我希望顺序由查询参数确定反向'布尔值。现在,查询似乎没有做任何事情。我究竟做错了什么?谢谢!
答案 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)