如何通过API使用BookshelfJS在SQL DB中find一个INT和所有INT

我正在创build一个使用ORM(书架)来查询postgresql的API。 在这种情况下,我想能够find所有属于用户的活动任务(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服务中分离查询数据库是一种很好的做法。 我build议用这样的方法创build一个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处理函数也会工作。