Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何在sails.js中定义错误消息_Node.js_Sails.js - Fatal编程技术网

Node.js 如何在sails.js中定义错误消息

Node.js 如何在sails.js中定义错误消息,node.js,sails.js,Node.js,Sails.js,这是我第一次使用sails,看起来不错,但我遇到了一个问题,是否可以在sails模型验证中定义自定义错误消息,因为返回的错误消息似乎是技术性的,而不是用户友好的 谢谢 更新:这里有一个丑陋的修复程序: 创建一个名为my validation utils的文件夹。在那里创建一个index.js文件。并将以下内容放在那里: var user = { email:{ required:'Email Required', email:'Should be an email' },

这是我第一次使用sails,看起来不错,但我遇到了一个问题,是否可以在sails模型验证中定义自定义错误消息,因为返回的错误消息似乎是技术性的,而不是用户友好的

谢谢

更新:

这里有一个丑陋的修复程序:

创建一个名为
my validation utils
的文件夹。在那里创建一个
index.js
文件。并将以下内容放在那里:

var user = {
  email:{
    required:'Email Required',
    email:'Should be an email'
  },
  name:{
    required:'name required'
  }

};

var product={
    name:{
         required:'Product name is required'
    }
}

var validationMessages = {
  user:user,
  product:product
};

/**
 * This function expects the name of the model and error.validationError
 * and puts the user defined messages in error.validationError 
 */
module.exports = function(model,validationError){
  var messages = validationMessages[model];
  for(key in messages){
    var element = messages[key];
   if(validationError[key]){
     for(i in validationError[key]){
       var err = validationError[key][i];
       err.message = element[err.rule];
     }
   }
  }
  return validationError;
};
现在在控制器中执行以下操作:

User.create(user).done(function (error, user) {
  if (error) {
    if (error.ValidationError) {
      var validator = require('path/to/my-validation-utils');
      var errors = validator('user',error.ValidationError);// puts the messages for model user
     //now errors contains the validationErrors with user defined messages
    }

  } else {
   //user is saved
  }
});

还有另一种选择:

/**
 * Takes a Sails Model object (e.g. User) and a ValidationError object and translates it into a friendly
 * object for sending via JSON to client-side frameworks.
 *
 * To use add a new object on your model describing what validation errors should be translated:
 *
 * module.exports = {
 *   attributes: {
 *     name: {
 *       type: 'string',
 *       required: true
 *     }
 *   },
 * 
 *   validation_messages: {
 *     name: {
 *       required: 'you have to specify a name or else'
 *     }
 *   }  
 * };
 *
 * Then in your controller you could write something like this:
 *
 * var validator = require('sails-validator-tool');
 *
 * Mymodel.create(options).done(function(error, mymodel) {
 *   if(error) {
 *     if(error.ValidationError) {
 *       error_object = validator(Mymodel, error.Validation);
 *       res.send({result: false, errors: error_object});
 *     }
 *   }
 * });
 *
 * @param model {Object} An instance of a Sails.JS model object.
 * @param validationErrors {Object} A standard Sails.JS validation object.
 *
 * @returns {Object} An object with friendly validation error conversions.
 */ 
module.exports = function(model, validationError) {
  var validation_response = {};
  var messages = model.validation_messages;
  validation_fields = Object.keys(messages);

  validation_fields.forEach(function(validation_field) {

    if(validationError[validation_field]) {
      var processField = validationError[validation_field];
      //console.log(processField);
      processField.forEach(function(rule) {
        if(messages[validation_field][rule.rule]) {
          if(!(validation_response[validation_field] instanceof Array)) {
            validation_response[validation_field] = new Array();
          }

          var newMessage={};
          newMessage[rule.rule] = messages[validation_field][rule.rule];
          validation_response[validation_field].push(newMessage);
        }
      });

    }
  });

  return validation_response;
};

感谢,我已经复制了您的建议,但是如果您忘记定义自定义错误,我做了一些修改以生成通用消息message@ginad-酷。你能分享给我们吗?谢谢:)@JohnKevinM.Basco,有人能确认error.ValidationError最新版本仍然存在于sails 11中,因为我目前正在尝试使用,但它不工作,调试后,我可以看到“error”对象不包含“ValidationError”属性。