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