Node.js 如何通过API使用BookshelfFJS在SQL DB中查找一个INT和所有INT

Node.js 如何通过API使用BookshelfFJS在SQL DB中查找一个INT和所有INT,node.js,postgresql,bookshelf.js,Node.js,Postgresql,Bookshelf.js,我正在创建一个使用ORM(书架)查询postgresql的API。在本例中,我希望能够找到属于某个用户(parent_task=*)的所有活动任务或属于具有特定父任务(parent_task=1/2/3…)的用户的所有任务。目前,这个端点可以很好地用于具有数字父级的任务,我不想通过编写另一个几乎相同的端点来扰乱我的api。那么,如何对同一端点使用通配符呢?或者我应该只写一个没有“andWhere”查询的独立端点吗 exports.assignedTasks = function(req, res

我正在创建一个使用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);
  })
};
exports.assignedtask=函数(请求、恢复){
新用户({User_id:req.params.id})
.related('assignedTasks')。查询(函数(qb){
qb.where('active','0')。和where('parent_task','=',req.params.parent)}.fetch()
.然后(功能(任务){
如果(任务){
res.status(200).json(任务)
}
否则{
json({'message':'Model not found'});
}
}).catch(函数(err){
res.status(500).json(err);
})
};

最好将数据库查询与REST服务分开。我建议使用如下方法创建
任务服务.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();
或者只使用一个参数(
getTasks(req.params.id)


请注意,即使未定义
req.params.parent
,“assignedTasks”REST处理程序函数也会工作。

Kalle,感谢您如此彻底地回答问题并加入最佳实践。我已经着手创建了另一个端点,但这看起来像是我想要的解决方案。
exports.assignedTasks = function(req, res){
   taskService.getTasks(req.params.id, req.params.parent)
    .then(function(tasks) {
        if (tasks) {
           res.status(200).json(tasks);
        }
        // ...
    })
    .catch( /* ... */ );
}