验证 feathresjs 中缺少参数

validating lack of parameters in feathresjs

我已经阅读了 feathersjs 文档,但是在服务中执行 find 方法后我意识到如果我不提供任何查询参数,服务 returns 所有数据,这是我不想。我如何定义一个钩子来验证至少有一个查询参数才能继续;否则,发回 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
        }
    }
})

我在挂钩文件中尝试了这个(看起来真的很绝望&|愚蠢):

function noparams (hook) {
    if (hook.params.query.name === undefined){
        console.log('There is no name, throw an error!');
    }
}

module.exports = {
    before: {
        find: [ noparams(this) ] ...
    }
}

但它无法编译(我不知道在那里作为参数发送什么),示例似乎是针对 2.0 之前的版本,最重要的是我发现的代码似乎在 app.js,但是所有的代码都使用 feathers-cli 进行了不同的编码,因此即使在书中,示例也不针对脚手架版本,这令人困惑,因为它们显示的代码应该在不同的文件中。

谢谢。

我结束了使用before hook,所以使用的代码是这样的:

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 错误处理程序,并且在文档|错误|REST 中指出。

谢谢。