节点/表达请求查询

TJH*_*TJH 1 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);
  }
});
Run Code Online (Sandbox Code Playgroud)

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

dwh*_*ieb 7

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

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

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