如何通过 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 处理程序函数也将起作用。