Hook 正在验证feathresjs中缺少参数

Hook 正在验证feathresjs中缺少参数,hook,feathersjs,Hook,Feathersjs,我已经阅读了feathersjs文档,但在服务中执行find方法后,我意识到如果我不提供任何查询参数,服务将返回所有数据,这是我不想要的。如何定义一个钩子来验证是否至少有一个查询参数才能继续;否则,返回403错误(错误请求) 我对这样做有疑问我试过这样做: app.service('myService') .before(function(hook) { if (hook.params.query.name === undefined){ cons

我已经阅读了feathersjs文档,但在服务中执行find方法后,我意识到如果我不提供任何查询参数,服务将返回所有数据,这是我不想要的。如何定义一个钩子来验证是否至少有一个查询参数才能继续;否则,返回403错误(错误请求)

我对这样做有疑问我试过这样做:

app.service('myService')
    .before(function(hook) {
        if (hook.params.query.name === undefined){
            console.log('There is no name, throw an error!');
        }
})
.find({
    query: {
        $sort: {
            year: -1
        }
    }
})
我在钩子文件中尝试了这个钩子(看起来真的很绝望&|愚蠢):

但它不可编译(我不知道如何作为参数发送),而且示例似乎是针对2.0之前的版本,除此之外,我发现的代码似乎在app.js中,但所有代码都使用feathers cli进行了不同的编码,因此即使在书中,示例也不反对框架版本,这是令人困惑的,因为它们显示了不同文件中的代码


谢谢。

我最后使用了before钩子,所以使用的代码如下:

const errors = require('feathers-errors');

module.exports = function () {
  return function (hook) {
    if(hook.method === 'find'){
      if (hook.params.query.name === undefined || hook.params.query.length == 0){
        throw new errors.BadRequest('Invalid Parameters');
      }else{
        return hook;
      }
    }
  }
};
如果您使用feathers cli生成应用程序(feathers v2.x),则无需执行任何其他操作。如果是早期版本,您可能需要添加Express错误处理程序,文档“Errors”REST中指出了这一点


谢谢。

您使用的数据库是什么?如果它是mongodb,那么它应该是这样工作的。我不认为你想改变这种行为。但是如果你坚持你可以做(hook.params.query.length>0)@Jalil。谢谢你的回答,请看我的更新。你知道更优雅的解决方案吗?这在我看来很肮脏。@Jalil我忘了提到我在与postgres合作。请参阅我的更新。你知道更优雅的解决方案吗?它很脏,我不喜欢,但这是我期望得到的。也许我应该试着为这个案例创建一个错误钩子。周末我都出去了。是的,应该有用。
const errors = require('feathers-errors');

module.exports = function () {
  return function (hook) {
    if(hook.method === 'find'){
      if (hook.params.query.name === undefined || hook.params.query.length == 0){
        throw new errors.BadRequest('Invalid Parameters');
      }else{
        return hook;
      }
    }
  }
};