【问题标题】:Customize validation message in node.js在 node.js 中自定义验证消息
【发布时间】:2013-03-21 06:50:02
【问题描述】:

我是 Node.js 的新手,在 node.js 中自定义验证消息时遇到问题。我使用 CRUD 操作使用 Compound JS 创建了一个简单的应用程序。在我的应用程序中有一个名为“id”的字段。 “id”字段只接受整数值。然后我使用 model/user.js 中的以下代码验证该字段。

module.exports = function (compound, User) {
 var num = /^\s*\d+\s*$/;
 User.validatesFormatOf('id', {with: num, message:"is not a number"});
};

通过使用上面的代码,它可以正常工作。但我也想检查该字段是否为空白。然后我稍微修改一下代码。修改后的代码如下:

module.exports = function (compound, User) {
     var num = /^\s*\d+\s*$/;
     User.validatesFormatOf('id', {with: num, message: {blank: "can't be blank", with: "is not a number"}});
    };

如果该字段为空,则验证消息将显示为“Id 不能为空”。但是当我在 id 字段中输入数字以外的值时,验证错误消息将是“Id [object Object]”。我认为关键字 with 不受支持。这里是否有任何其他关键字,如“空白”或“分钟”,以便我可以将验证消息作为“ID 不是数字”来获取。

我找到了一个解决方案,所以修改后的 user.js 版本是这样的:

 module.exports = function (compound, User) {
     var num = /^\s*\d+\s*$/;
     User.validatesPresenceOf('id', {message: "can't be blank"});
     User.validatesFormatOf('id', {with: num, message:"is not a number"});
    };

上述代码的问题在于它同时显示了两条验证消息,即同时显示默认和自定义空白消息。我的要求是一次只显示一个字段的一条验证消息。这可能吗?

【问题讨论】:

    标签: node.js express railway.js compoundjs


    【解决方案1】:

    这看起来像是 JugglingDB(CompoundJS 使用的 ORM)中的一个错误。

    考虑以下代码:

    var juggling = require('jugglingdb');
    var Schema = juggling.Schema;
    
    var schema = new Schema('memory');
    var User = schema.define('User');
    var num = /^\s*\d+\s*$/;
    
    User.validatesPresenceOf('id', {message: "can't be blank"});
    User.validatesFormatOf('id', {with: num, message:"is not a number"});
    User.validatesFormatOf('id', {with: num, message:"is not a number"});
    
    var user = new User({ id : '' });
    
    user.isValid(function(valid) {
      if (! valid)
      {
        console.log('invalid', user.errors);
      }
      else
      {
        console.log('valid');
      }
    });
    

    这实际上会产生 3 个错误:

    invalid { id: [ 'can\'t be blank', 'is blank', 'is blank' ] }
    

    如果再添加一个User.validatesFormat,会产生4个错误。 JugglingDB 的验证代码中某处似乎存在范围界定问题,我将发布错误报告。

    现在,也许您可​​以只使用出现的第一个错误 (user.errors[0])。 编辑:从外观上看,如果它可以工作,你也必须这样做,因为 JugglingDB 将运行所有验证测试并为所有失败的测试生成错误。

    【讨论】:

    猜你喜欢
    • 2012-12-12
    • 2014-05-31
    • 2011-10-21
    • 2014-08-15
    • 1970-01-01
    • 2017-06-28
    • 2017-12-13
    相关资源
    最近更新 更多