1

我是 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"});
    };

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

4

1 回答 1

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 将运行所有验证测试并为所有失败的测试生成错误。

于 2013-03-21T07:38:17.077 回答