在node.js中定制validation消息

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

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

然后validation消息,如果该字段为空,将显示为“Id不能为空”。 但是,当我input除数字以外的id字段中的值时,validation错误消息将是“Id [object Object]”。 我认为关键字不支持。 这里是否有任何其他关键字,如“空白”或“分钟”使用,所以我可以得到validation信息为“Id不是一个数字”。

我find了解决scheme,所以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"}); }; 

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

它看起来像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个错误。 它看起来像JugglingDBvalidation代码中的一个范围问题,我会发布一个错误报告。

现在,也许你可以使用发生的第一个错误( user.errors[0] )。 编辑:由它的外观,这就是你也必须做,如果它能工作,因为JugglingDB将运行所有validationtesting,并为所有失败的testing产生一个错误。