【问题标题】:Can I use Loopback Model Validations only when a property is certain value我可以仅在属性为特定值时使用环回模型验证吗
【发布时间】:2015-07-10 13:50:38
【问题描述】:

我在 strongloop 环回中有一个“post”模型,具有一些属性:

  • 标题
  • 文字
  • 标签
  • 类别
  • 已发布(对或错)

是否可以在strongloop loopback中使用模型验证,但仅在我想发布帖子时使用,而不是在我保存时?

【问题讨论】:

    标签: validation loopbackjs


    【解决方案1】:

    设置一个自定义的post.saveOrPublish()远程方法,只在post.publish === true时调用post.isValid()。或者在没有验证的情况下使用内置的persistedModel.save(),并在您实际单击发布按钮时使用自定义的post.publish()远程方法,这将在调用save()之前触发您的验证代码。

    saveOrPublish 示例:(未经测试,只是一个粗略的想法):

    module.exports = function(Post) {
    
      Post.saveOrPublish = function(post, cb) {
    
        if(post.publish) {
    
          post.isValid(function(valid){
    
            if(valid) {
              Post.upsert(post, function(err, post) {
                if(err) {cb(err, null);}
    
                cb(null, post);
    
              });
            } else {
              cb(new Error('Publishing requires a valid post.'), post)
            }
    
          });
    
        } else {
    
          Post.upsert(post, function(err, post) {
            if(err) {cb(err, null);}
    
            cb(null, post);
    
          });
    
        }
    
      };
    
      // don't forget the remote method def
      Post.remoteMethod('saveOrPublish',
        {
          accepts: [{ 
            arg: 'post', 
            type: 'object'
          }],
          returns: { 
            arg: 'result', 
            type: 'object'
          },
          http: {verb: 'post'}
        }
      );
    
    
    };
    

    【讨论】:

    • 谢谢!当我使用 upsert (PUT) 而不是 POST 结合 validateUpsert:false 创建一个新 Post 时,验证不会被执行,这就是我想要的,然后我在远程发布方法中手动调用它
    猜你喜欢
    • 1970-01-01
    • 2013-01-07
    • 1970-01-01
    • 2017-05-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 2014-08-01
    相关资源
    最近更新 更多