- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我使用 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/
我想实现这一目标 SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng )
我要表演WHERE - IN查询/操作但正常的地方给出错误。 我要这个 select * from `calendar_event_rsvp` where `event_id` in ('1', '2
我正在尝试使用 knex 进行简单的计数(因为它似乎是 to not be supported by bookshelf yet )。以下代码正在运行: bookshelf.knex('hosts')
我想创建一个脚本作为 cron 任务在我的服务器后台运行。 我希望脚本能够访问 sails 环境(即加载所有模块,尤其是 bookshelf 和 knex,以及数据库连接)。 这样我就可以创建一个看起
我正在尝试播种,保存在用户中,然后获取 userId 并插入到帐户表中: exports.seed = function(knex, Promise) { return Promise.join(
我正在使用 knex 和书架,我的表由作者、标题、内容、计数组成,每个数据如下所示: author: 'John Doe', title: 'aaaaa', content: 'aaaaaaaa' c
我有2个型号 Book: id, name, data (json) Author: id, name 我想用Book方法扩展author模型,该方法在查询withRelated时返回作者。如果我在a
如何使用事务处理 t,我想确保在保存记录之前成功删除该行: var Roles = bookshelf.Collection.extend({ model: Role ); Role.whe
我一直在做许多操作,我希望有一种方法可以“扩展”knex 来完成它们。 我想要类似的东西: oneExists result = knex.count(id).from('table').wh
我正在与 Bookshelf.js 作斗争,希望有人能帮我一把。 我的客户拥有各种类型的联系人(电子邮件地址、Facebook、Skype 等)。所以我分成三个表来标准化类型。我似乎无法找到如何正确查
我正在尝试使用 Express/Bookshelf/Awesomeplete 创建自动完成搜索。 我一直在试图找出如何使用像这样的Where Like 查询将搜索词传递到Bookshelf,我正在从P
我想监控对我的 API 数据库的查询所花费的时间。我使用 Bookshelf 插件 bookshelf-signals 创建了以下函数。 : bookshelf.on('fetching', () =
以下 Bookshelf 模型在保存模型时对用户密码进行哈希处理,唯一的问题是如果我将 model.set() 调用更改为 model.save() 它进入无限保存/更改循环。 var User =
我需要遍历 Bookshelf 集合中的所有模型,计算一些信息,然后将该信息存储回每个模型。为了回滚错误,我在单个事务中执行此操作很重要。 我遇到的问题是我真正能想到的唯一方法是使用 Promise.
我正在使用 karma-jasmine、webpact 运行单元测试。我尝试使用 bookshelf 在 mysql 数据库中插入一条记录。我收到以下错误消息: ReferenceError:书架未定
我正在开发一个已docker化的express.js应用程序。这是我提供给书架的配置信息。 { "database_dev" : { "client": "mysql",
我正在努力弄清楚如何与 Bookshelf.js 和 postgres 建立深厚的关系。 假设我有三个模型,User、Org 和 UserRole ... User 和 Org 具有多对多关系。 Us
Bookshelf.js 中 Collections 的 attach 和 updatePivot 方法似乎都作用于多对多关系,但它们似乎都没有保存或更新( upsert) 多对多关系项。运行 att
我正在尝试使用 bookshelf.js 作为 Postgresql 的 ORM 在 node.js 应用程序中实现基于 Angular 色的访问控制。我有以下架构: USERS ROLES RI
在一个原始的 MySQL 查询中,我有这样的东西: Select total_sales - over_head_costs As net_sales from departments; 如何使用 B
我是一名优秀的程序员,十分优秀!