StrongLoop 验证错误和必填字段
StrongLoop Validation Error and required fields
我正在使用 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": {}
}
想通了。首先,仍然需要电子邮件,因为解决方法是指定 User
模型不需要电子邮件,只需要 User
模型。我想因为我继承了 User
模型,所以不需要电子邮件。您需要专门将该工作分配给您的新模型。就我而言,people
。像这样:
module.exports = function(app) {
delete app.models.people.validations.email;
};
至于验证错误,这是因为我使用的是 MySQL 而我的数据库中没有 User
模型的所有字段。有人告诉我这不是 MongoDB 或其他 NoSQL 类型的问题。但是如果它是关系型的,那么即使您不使用它们,您也必须包括基本模型的所有字段。使用 autoMigrate()
或 autoUpdate()
也可以防止这种情况发生。
我正在使用 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": {}
}
想通了。首先,仍然需要电子邮件,因为解决方法是指定 User
模型不需要电子邮件,只需要 User
模型。我想因为我继承了 User
模型,所以不需要电子邮件。您需要专门将该工作分配给您的新模型。就我而言,people
。像这样:
module.exports = function(app) {
delete app.models.people.validations.email;
};
至于验证错误,这是因为我使用的是 MySQL 而我的数据库中没有 User
模型的所有字段。有人告诉我这不是 MongoDB 或其他 NoSQL 类型的问题。但是如果它是关系型的,那么即使您不使用它们,您也必须包括基本模型的所有字段。使用 autoMigrate()
或 autoUpdate()
也可以防止这种情况发生。