如何使用钩子阻止模型添加



我是一个有环回的新手,有些东西我真的不明白钩子。

我有一个具有这些属性的模型"问题":- id - .. - .. - userId

我想做的是在调用 POST 请求以添加问题时检查用户表中是否已存在 userId。(并引发错误,但这已经起作用了)

所以我创建了一个保存钩子之前,它运行良好(引发错误等),但我无法阻止模型的添加,即使我在钩子中调用"next(err)"。

 Question.observe('before save', function isInDb(ctx, next){    
     var PoemUser = app.models.PoemUser;
     var PoemUserId = ctx.instance.id_author;
     PoemUser.findOne({ where: {id: PoemUserId} } ,function(err,exists){
             console.log('exist : ' +exists);
             if (exists == null){
                 var err = new Error();
                 err.name = "id not existing"
                 err.status = 404; // don't know wich code use
                 err.message = "This user is not existing";
                 next(err);
             };
         });
     });
 };

搜索了文档,但我认为我的方式并不好。

如果有人能向我解释做我想做的事情的好方法,那就太好了。

提前谢谢你!

使用钩子来防止模型添加是一个非常好的方法。我的印象是,您正试图在用户存在时阻止添加问题。

你能检查以下代码吗?

PoemUser.findOne({ where: {id: PoemUserId} }, function(err,exists){
        if(err) {
          next(error);
        }
        console.log('exist : ' +exists);
         if (!exists){
             var err = new Error();
             err.status = 404; // don't know which code use
             err.message = "User not found";
             next(err);
         } else {
             next();
         }
     });
 });

仔细检查属性名称,因为您提到问题模型包含userId字段,但您正在尝试保存属性id_authorctx.instance.id_author;

仅供参考:

  • ctx.instance仅在保存新问题时可用,而不是在您更新问题时可用。
  • 更新问题时,您将在 ctx.data 中获取实例。

相关内容

  • 没有找到相关文章

最新更新