为我的Restful API实现排序

时间:2017-11-07 06:18:07

标签: node.js rest api

我已成功为我的API实现了GET和DELETE方法(GET localhost:4000 / users / api,DELETE localhost:4000 / users / api on Postman工作正常)。

我现在要实现的是指定对每个特定字段进行排序的顺序,其中1为升序,-1为降序。例如,

如果我使用localhost:4000 / api / users?sort = {fieldName:1}

这将返回按' fieldName'。

排序的用户列表

到目前为止,我所做的是:

router.get('/', function(req, res) {
  let obj = JSON.parse(req.query.sort)

  user
   .find({})
   .sort(obj) 
   .exec(function(err, users) {
      if(err){
          res.status(404).send({
              message: err,
              data: []
          });
      } else {
          res.status(200).send({
              message: 'OK',
              data: users
          });
      }
  });
});

这适用于正常排序,但我想知道如何使用-1和1指定升序和降序。

编辑:

router.get('/', function(req, res) {

    var count = req.query.count;
    var sorting = req.query.sort;
    //let obj = JSON.parse(sorting)
    let obj = {}
    obj[fieldname] = req.query.sort.fieldName == '1' ? 1:-1

    if(sorting != null) {
      user
       .find({})
       .sort(obj) 
       .exec(function(err, users) {
          if(err){
              res.status(404).send({
                  message: err,
                  data: []
              });
          } else {
              res.status(200).send({
                  message: 'OK sorted',
                  data: users
              });
          }
      });
    }

});

1 个答案:

答案 0 :(得分:1)

您必须将1和-1从字符串更改为数字。 你可以得到这样的查询“localhost:4000 / api / users?sort [fieldName] = 1” 然后在代码中定义obj,如

let obj = {}
obj['fieldName'] = req.query.sort.fieldName == '1' ? 1:-1

然后将obj传递给find中的sort部分。