如何通过 API 使用 BookshelfJS 在 SQL 数据库中找到一个 INT 和所有 INT
How to find one INT and all INTs in SQL DB using BookshelfJS through an API
我正在创建一个使用 ORM(书架)查询 postgresql 的 API。在这种情况下,我希望能够找到属于用户的所有活动任务(parent_task = *)或属于具有特定父任务的用户的所有任务(parent_task = 1/2/3 ...)。目前,此端点适用于具有数字父项的任务,我不想通过编写另一个几乎相同的端点来弄乱我的 api。那么我怎样才能对同一个端点使用通配符呢?或者我应该只写一个没有 'andWhere' 查询的单独端点吗?
exports.assignedTasks = function(req, res){
new User({user_id: req.params.id})
.related('assignedTasks').query(function(qb) {
qb.where('active', '<>', '0').andWhere('parent_task', '=', req.params.parent) }).fetch()
.then(function(tasks){
if (tasks){
res.status(200).json(tasks)
}
else{
res.status(404).json({'message' : 'Model not found'});
}
}).catch(function(err){
res.status(500).json(err);
})
};
最好将数据库查询与 REST 服务分开。我建议用这样的方法创建一个 task-service.js
:
exports.getTasks = function(user_id, parent_id) {
// note the 'return' below.
return new User({user_id: user_id})
.related('assignedTasks')
.query(function (qb) {
qb = qb.where('active', '<>', '0');
if (parent_id) {
// if the function is called with one parameter or
// second parameter is null, this will be skipped.
qb.andWhere('parent_task', '=', parent_id);
}
}).fetch();
然后,在您的 task-rest.js
(或其他)中,您将按以下方式调用它:
exports.assignedTasks = function(req, res){
taskService.getTasks(req.params.id, req.params.parent)
.then(function(tasks) {
if (tasks) {
res.status(200).json(tasks);
}
// ...
})
.catch( /* ... */ );
}
或者只有一个参数(getTasks(req.params.id)
)。
请注意,即使 req.params.parent
未定义,'assignedTasks' REST 处理程序函数也将起作用。
我正在创建一个使用 ORM(书架)查询 postgresql 的 API。在这种情况下,我希望能够找到属于用户的所有活动任务(parent_task = *)或属于具有特定父任务的用户的所有任务(parent_task = 1/2/3 ...)。目前,此端点适用于具有数字父项的任务,我不想通过编写另一个几乎相同的端点来弄乱我的 api。那么我怎样才能对同一个端点使用通配符呢?或者我应该只写一个没有 'andWhere' 查询的单独端点吗?
exports.assignedTasks = function(req, res){
new User({user_id: req.params.id})
.related('assignedTasks').query(function(qb) {
qb.where('active', '<>', '0').andWhere('parent_task', '=', req.params.parent) }).fetch()
.then(function(tasks){
if (tasks){
res.status(200).json(tasks)
}
else{
res.status(404).json({'message' : 'Model not found'});
}
}).catch(function(err){
res.status(500).json(err);
})
};
最好将数据库查询与 REST 服务分开。我建议用这样的方法创建一个 task-service.js
:
exports.getTasks = function(user_id, parent_id) {
// note the 'return' below.
return new User({user_id: user_id})
.related('assignedTasks')
.query(function (qb) {
qb = qb.where('active', '<>', '0');
if (parent_id) {
// if the function is called with one parameter or
// second parameter is null, this will be skipped.
qb.andWhere('parent_task', '=', parent_id);
}
}).fetch();
然后,在您的 task-rest.js
(或其他)中,您将按以下方式调用它:
exports.assignedTasks = function(req, res){
taskService.getTasks(req.params.id, req.params.parent)
.then(function(tasks) {
if (tasks) {
res.status(200).json(tasks);
}
// ...
})
.catch( /* ... */ );
}
或者只有一个参数(getTasks(req.params.id)
)。
请注意,即使 req.params.parent
未定义,'assignedTasks' REST 处理程序函数也将起作用。