验证feathresjs缺乏参数

时间:2017-05-11 15:11:08

标签: hook feathersjs

我已经阅读了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
        }
    }
})

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

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

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

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

感谢。

1 个答案:

答案 0 :(得分:0)

我结束了使用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;
      }
    }
  }
};

如果使用feather-cli生成您的应用程序(feather v2.x),您不需要做任何其他事情。如果是早期版本,您可能需要添加Express错误处理程序,并在文档|错误| REST中指出。

感谢。