我是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]”。我认为不支持关键字。这里有任何其他关键字,如“空白”或“分钟”,所以我可以获得验证消息“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"});
};
上述代码的问题在于它同时显示两条验证消息,即默认和自定义空白消息同时显示。我的要求是一次只显示一个字段的验证消息。这可能吗?
答案 0 :(得分: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将运行所有验证测试并为所有失败测试生成错误。