模型验证在 Sails.js 中失败

Model validation fails in Sails.js

本文关键字:失败 js Sails 验证 模型      更新时间:2023-09-26

我在Sails中测试了以下Employee.js模型.js我发现了一些对我来说似乎很难理解的东西。

发布创建新员工的表单时,我在第一个定义 Employee .js 模型中出现以下错误,但 Employee.js 的第二个定义有效。那么员工.js的两个定义有什么区别呢?

错误:

Error (E_VALIDATION) :: 3 attributes are invalid
    at WLValidationError.WLError (/usr/local/lib/node_modules/sails/node_modules/waterline/lib/waterline/error/WLError.js:33:18)
    at new WLValidationError (/usr/local/lib/node_modules/sails/node_modules/waterline/lib/waterline/error/WLValidationError.js:20:28)
    at /usr/local/lib/node_modules/sails/node_modules/waterline/lib/waterline/query/validate.js:45:43
    at allValidationsChecked (/usr/local/lib/node_modules/sails/node_modules/waterline/lib/waterline/core/validations.js:195:5)
    at done (/usr/local/lib/node_modules/sails/node_modules/waterline/node_modules/async/lib/async.js:135:19)
    at /usr/local/lib/node_modules/sails/node_modules/waterline/node_modules/async/lib/async.js:32:16
    at /usr/local/lib/node_modules/sails/node_modules/waterline/lib/waterline/core/validations.js:186:14
    at done (/usr/local/lib/node_modules/sails/node_modules/waterline/node_modules/async/lib/async.js:135:19)
    at /usr/local/lib/node_modules/sails/node_modules/waterline/node_modules/async/lib/async.js:32:16
    at /usr/local/lib/node_modules/sails/node_modules/waterline/lib/waterline/core/validations.js:157:64
Invalid attributes sent to Employee:
 • name
   • `undefined` should be a string (instead of "null", which is a object)
   • "required" validation rule failed for input: null
 • email
   • `undefined` should be a email (instead of "null", which is a object)
   • "required" validation rule failed for input: null
 • password
   • `undefined` should be a string (instead of "null", which is a object)
   • "required" validation rule failed for input: null

定义1:员工.js

module.exports = {
  attributes: {
    name: {
      type: 'STRING',
    },
    email: {
      type: 'STRING',
      email: true,
    },
    password: {
      type: 'STRING',
    },
    toJSON: function() {
      var obj = this.toObject();
      return {
        name: obj.name,
        email: obj.email,
        password: obj.password
      }
    }
  }
};

定义2:员工.js

module.exports = {
  attributes: {
    name: 'STRING',
    email: 'STRING',
    password: 'STRING',
    toJSON: function() {
      var obj = this.toObject();
      return {
        name: obj.name,
        email: obj.email,
        password: obj.password
      }
    }
  }
};

创建新员工的表格如下:

<form action="/signupemployee" method="POST">
  <table>
    <tr><td>Name</td><td><input type=”text” name=”name”></td></tr>
    <tr><td>Password</td><td><input type=”password” name=”password”></td></tr>
    <tr><td>Email</td><td><input type=”email” name=”email”></td></tr>
    <tr><td></td><td><input type="submit"></td>
  </table>
</form>

应该只存在一个区别。在第二个模型中,电子邮件属性不需要包含有效电子邮件格式的字符串。据我所知,定义如下;

name: {
    type: "STRING"
}

name: "STRING"

旨在等效,因此这可能是 Waterline 中的错误。

尽管这个问题是不久前提出的,但可能仍然值得提出一个问题以确保它得到解决。

这应该有效:

email: {
    type: 'email',
    required: true,
    unique: true
}