gpt4 book ai didi

javascript - 如何使用 bookshelf 根据 API url 中的查询字符串中传递的参数过滤数据?

转载 作者:太空宇宙 更新时间:2023-11-03 22:29:00 25 4
gpt4 key购买 nike

我使用 Bookshelf 在 Express 中创建了 REST API,它以 JSON 形式获取所有贡献者的列表

说出API:

GET example.com/contributors

我需要为API制作过滤器和分页,过滤器选项可以是任意的

GET example.com/contributors?status=1&type=pro

所以它会返回所有status=1且type='pro'的数据,

我可以使用 where 子句获取过滤后的数据

Model.Contributors.forge()
.query({where: {status: query_params.status, type: query_params.type}})
.fetch()

我在看什么?

但是这里必须手动指定“where”键值。由于这些过滤器并不总是固定的,而是取决于客户端想要根据需要过滤数据的字段设置的条件,那么如何使用 bookshelf 在 Express Node api 中实现此结构?

这是 REST API 获取过滤器数据的正确方法还是需要根据 REST API 最佳实践实现的其他方式?

代码

routes/contributors.js

var Contributor_Service = require('./../services/contributor-service');

var express = require('express');
var router = express.Router();

/* GET all the contributors listing. */
router.get('/', function (req, res, next) {
Contributor_Service.listAllContributors(req.query, function (err, data) {
if (err) {
res.status(500).json({error: true, data: {message: err.message}});
} else {
res.json({error: false, data: data.toJSON()});
}
});

});

module.exports = router;

services/contributor-service.js

var Model = require('./../models/Contributor');
var express = require('express');

var listAllContributors = function ( query_params, callback) {

// for (var x in query_params) {
// console.log(query_params[x]);
// console.log(x);
//}
Model.Contributors
.forge()
.query({where: {status: query_params.status, type: query_params.type}})
.fetch()
.then(function (collection) {
return callback(null, collection);
})
.catch(function (err) {
return callback(err, null);
});
};

models/Contributor.js

var Bookshelf = require('../../dbconfig').bookshelf;

var Contributor = Bookshelf.Model.extend({
tableName: 'users'
});
var Contributors = Bookshelf.Collection.extend({
model: Contributor
});

module.exports = {
Contributor: Contributor,
Contributors: Contributors
};

最佳答案

我已经使用了 where 对象,但仍然不确定这是否是编写 REST API 过滤器的正确方法

因为可以有许多其他查询参数用于对数据进行排序,偏移量和限制,需要根据查询中传递的条件和字段在 Controller 中检查和实现。

services/contributor-service.js

var Model = require('./../models/Contributor');
var express = require('express');

var listAllContributors = function ( query_params, callback) {

var whereObj = {};

for (var x in query_params) {
whereObj[x] = query_params[x];

Model.Contributors
.forge()
.query({where: whereObj})
.fetch()
.then(function (collection) {
return callback(null, collection);
})
.catch(function (err) {
return callback(err, null);
});
};

关于javascript - 如何使用 bookshelf 根据 API url 中的查询字符串中传递的参数过滤数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40564355/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com