使查询字符串参数更改RESTful API的特定数据字段

时间:2017-11-03 01:32:10

标签: node.js rest api sorting

我是RESTful API的新手,并且我已成功为我的API实现了GET和DELETE方法(GET localhost:4000 / api,Postman上的DELETE localhost:4000 / api工作正常)。

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

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

这将返回按' fieldName'。

排序的用户列表

我试着做

router.get('/', function(req, res) {
  var sort = req.query.sort;

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

但是因为"名称"部分是硬编码的,它只适用于名称。我想让用户指定字段名称并根据它对列表进行排序。

我需要添加什么?

编辑:这就是我的数据的样子

{
    "message": "OK",
    "data": [
        {
            "_id": "59faba588f3f6211ac7db43c",
            "name": "Kim2",
            "email": "kk2@gmail.com",
            "__v": 0,
            "dateCreated": "2017-11-02T06:25:28.225Z",
            "pendingTasks": []
        },
        {
            "_id": "59facf56e8c5663343d4b644",
            "name": "Minnie Payne",
            "email": "minnie@gmail.com",
            "__v": 0,
            "dateCreated": "2017-11-02T07:55:02.552Z",
            "pendingTasks": []
        },
        {
            "_id": "59fb699c3c00c60990fa6edb",
            "name": "jerry watson",
            "email": "jerry@wgmail.com",
            "__v": 0,
            "dateCreated": "2017-11-02T18:53:16.637Z",
            "pendingTasks": []
        }, ...

EDIT2

  user
   .find({})
   .sort('name') 
   .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)

您要做的是通过字符串命名对象属性。 为此,您可以执行以下操作:

var string = 'name'
var obj = {}
obj[string] = 'val'
console.log(obj) // {name: 'val'}

所以,在你的例子中:

router.get('/', function(req, res) {
  var sort = req.query.sort;
  var name = req.query.name;
  var obj = {}
  obj[name] = 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
          });
      }
  });
});

编辑:localhost:4000 / api / users的解决方案?sort = {fieldName:1}

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
          });
      }
  });
});