我正在开发一个带有环回的API,一切正常,直到我决定在数据库中更改我的文档的ID。现在我不想让它们自动生成。
现在我自己设置了Id。每当我点击此端点时,我都会收到“未知ID”404:GET properties/{id}
如何使用loopback和mongodb的自定义ID?
每当我点击此端点时:http://localhost:5000/api/properties/20020705171616489678000000
我收到这个错误:
{
"error": {
"name": "Error",
"status": 404,
"message": "Unknown \"Property\" id \"20020705171616489678000000\".",
"statusCode": 404,
"code": "MODEL_NOT_FOUND"
}
}
这是我的model.json,以防万一...
{
"name": "Property",
"plural": "properties",
"base": "PersistedModel",
"idInjection": false,
"options": {
"validateUpsert": true
},
"properties": {
"id": {"id": true, "type": "string", "generated": false},
"photos": {
"type": [
"string"
]
},
"propertyType": {
"type": "string",
"required": true
},
"internalId": {
"type": "string",
"required": true
},
"flexCode": {
"type": "string",
"required": true
}
},
"validations": [],
"relations": {},
"acls": [],
"methods": []
}
答案 0 :(得分:1)
当我使用带有文本ID字段的较小数字的PostGreSQL数据库设置尝试时,您的模型设置(带有idInjection: true
或false
)确实有效。
运行带有DEBUG=loopback:connector:* node .
的Loopback应用程序输出正在终端中运行的数据库查询 - 我尝试使用您正在尝试的id值并且参数值为[2.002070517161649e+25]
,因此数字的大小是问题。
你可以尝试将它作为Loopback中的一个bug来提升,但JS在处理大数字时非常糟糕,所以你最好不要使用如此大的数字作为标识符。
如果ID是超过16个字符的字母数字字符串,它确实有效,因此可能有一个解决方法(使用ObjectId?),具体取决于您要实现的目标。