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 验证错误和必填字段的主要内容,如果未能解决你的问题,请参考以下文章
错误:升级失败:错误验证“”:错误验证数据:ValidationError(Ingress.spec.rules[0].http):缺少必填字段“路径”