StrongLoop 验证错误和必填字段

Posted

技术标签:

【中文标题】StrongLoop 验证错误和必填字段【英文标题】:StrongLoop Validation Error and required fields 【发布时间】:2016-02-23 17:53:24 【问题描述】:

我正在使用 StrongLoop 和 Loopback 创建 API。我已经将内置的User 模型扩展为我自己的模型people。我不希望User 模型像默认情况下那样需要电子邮件,所以我遵循this work around,现在当我使用默认User 模型创建用户时,不需要电子邮件。但是当我使用我的people 模型时,它仍然是必需的。我在这里错过了什么?

另外,当我将我的people 模型连接到我的 mysql 数据库时遇到一个奇怪的错误。如果我有默认内存连接器,即使用db 数据源,我可以很好地创建用户,但是当我将它连接到 MySQL 数据库时,我得到:


  "error": 
    "name": "ValidationError",
    "status": 422,
    "message": "The `people` instance is not valid. Details: `username` is     invalid (value: \"username123\"); `email` is invalid (value: \"testing@email.com\").",
"statusCode": 422,
"details": 
  "context": "people",
  "codes": 
    "username": [
      "uniqueness.Error: ER_BAD_FIELD_ERROR: Unknown column 'realm' in 'field list'"
    ],
    "email": [
      "uniqueness.Error: ER_BAD_FIELD_ERROR: Unknown column 'realm' in 'field list'"
    ]
  ,
  "messages": 
    "username": [
      "is invalid"
    ],
    "email": [
      "is invalid"
    ]
  
,
"stack": "ValidationError: The `people` instance is not valid. Details: `username` is invalid (value: \"username123\"); `email` is invalid (value: \"testing@email.com\").\n    at /var/www/photo-app/node_modules/loopback-datasource-juggler/lib/dao.js:265:12\n    at ModelConstructor.<anonymous> (/var/www/photo-app/node_modules/loopback-datasource-juggler/lib/validations.js:487:13)\n    at ModelConstructor.next (/var/www/photo-app/node_modules/loopback-datasource-juggler/lib/hooks.js:75:12)\n    at done (/var/www/photo-app/node_modules/loopback-datasource-juggler/lib/validations.js:484:25)\n    at /var/www/photo-app/node_modules/loopback-datasource-juggler/lib/validations.js:558:7\n    at ModelConstructor.<anonymous> (/var/www/photo-app/node_modules/loopback-datasource-juggler/lib/validations.js:357:5)\n    at allCb (/var/www/photo-app/node_modules/loopback-datasource-juggler/lib/dao.js:1483:7)\n    at /var/www/photo-app/node_modules/loopback-connector-mysql/node_modules/loopback-connector/lib/sql.js:1061:14\n    at cbForWork (/var/www/photo-app/node_modules/loopback-datasource-juggler/lib/observer.js:150:34)\n    at /var/www/photo-app/node_modules/loopback-connector-mysql/node_modules/loopback-connector/lib/sql.js:413:7"
  

这是该模型的外观:

"name": "people",
  "base": "User",
  "idInjection": true,
  "options": 
    "validateUpsert": true
  ,
  "properties": 
    "id": 
      "type": "number",
      "required": true
    ,
    "username": 
      "type": "string",
      "required": true
   ,
    "email": 
      "type": "string"
    ,
    "password": 
      "type": "string",
      "required": true
    ,
    "created": 
      "type": "string"
    
  ,
  "validations": [],
  "relations": ,
  "acls": [],
  "methods": 

【问题讨论】:

【参考方案1】:

想通了。首先,仍然需要电子邮件,因为解决方法是指定 User 模型不需要电子邮件,而只需要 User 模型。我想因为我继承了User 模型,所以不需要电子邮件。您需要专门将该工作分配给您的新模型。就我而言,people。像这样:

module.exports = function(app) 
  delete app.models.people.validations.email;
;

至于验证错误,这是因为我使用的是 MySQL,而我的数据库中没有 User 模型的所有字段。我被告知这不是 MongoDB 或其他 NoSQL 类型的问题。但是,如果它是关系的,则您还必须包括基本模型的所有字段,即使您不使用它们。使用autoMigrate()autoUpdate() 也可以防止这种情况发生。

【讨论】:

你好,我仍然面临这个问题,你能告诉我详细的答案吗

以上是关于StrongLoop 验证错误和必填字段的主要内容,如果未能解决你的问题,请参考以下文章

在Woocommerce结帐页面中设置唯一的验证错误通知

Spring“类型不匹配”和必填字段

错误:升级失败:错误验证“”:错误验证数据:ValidationError(Ingress.spec.rules[0].http):缺少必填字段“路径”

PHP 表单验证 - 必填字段

SpringFox Swagger - 模型中的可选和必填字段

带有验证和存储 Jquery 的 Laravel 表单添加 html 元素