我已经阅读了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进行了不同的编码,因此即使在本书中,这些示例也不反对脚手架版本,这是令人困惑的,因为它们显示了不同文件中的代码应该是。
感谢。
答案 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中指出。
感谢。