我是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
});
}
});
答案 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
});
}
});
});