【问题标题】:Custom Model Validator SailsJS自定义模型验证器 SailsJS
【发布时间】:2015-08-30 00:12:58
【问题描述】:

使用自定义模型验证器检查模型中的记录时。价差内的回报似乎并没有结束控制流。

//Post.js Model  

  /**
   *  Custom Validator
   **/
  types: {
    isUserValid: function(user_id) {
      var Promise = require('bluebird');

      Promise.all([
        User.findOne({id: user_id})
      ])
        .spread(function(user) {
          console.log(user);
          if (user === null || user === undefined) {
            console.log('failed');
            return false;
          }else{
            console.log('passed');
            return true;
          }
        });
    }
  },

我的回复是标准验证失败回复。

{
  "error": "E_VALIDATION",
  "status": 400,
  "summary": "1 attribute is invalid",
  "model": "Post",
  "invalidAttributes": {
    "owner": [
      {
        "rule": "isUserValid",
        "message": "\"isUserValid\" validation rule failed for input: 1"
      }
    ]
  }
}

【问题讨论】:

    标签: node.js sails.js sails.io.js


    【解决方案1】:

    看起来您希望“返回 true 并返回 false”作为 isUserValid 函数的返回值。但实际上这不是 javascript 范围的工作方式。您的传播函数中的 return 语句 return true 仅表示承诺以“true”解决。它不作为函数返回。函数 isUserValid 仍然没有返回任何内容。如果这个函数可以是一个异步承诺。你至少应该兑现承诺。

    return Promise.all([....]).spread.....
    

    其实可以简化

    return User.findOne(user_id).then(function(u){....})
    

    但是,如果这个函数不支持 promise,意味着它是同步的,并且期望返回一个 true/false,而不是一个 promise 对象。您必须使此过程同步。将 Promise 转换为同步的一种方法是使用生成器函数。见here

    【讨论】:

      猜你喜欢
      • 2012-01-29
      • 1970-01-01
      • 2011-12-19
      • 2016-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-11
      • 1970-01-01
      相关资源
      最近更新 更多