【发布时间】:2018-01-22 22:38:48
【问题描述】:
Restheart 为文档添加返回一个空响应(使用 PUT 或 POST 方法)。
是否可以修改配置,使其返回有效的 json 响应:
比如{}?
有没有办法让restheart返回插入文档的id或objectId?
版本:
- restheart 3.0.0
- mongoDb 3.4.1
【问题讨论】:
Restheart 为文档添加返回一个空响应(使用 PUT 或 POST 方法)。
是否可以修改配置,使其返回有效的 json 响应:
比如{}?
有没有办法让restheart返回插入文档的id或objectId?
版本:
【问题讨论】:
谢谢mturatti!
对我来说太糟糕了。 我正在使用可以在 EmberJS 应用程序中自定义的 RESTAdapter。
RESTAdapter 仍在等待 JSON 响应:我找到了解决方案,将 Ajax 查询的 dataType 从“JSON”更改为“*”。
但是没有返回JSON格式的id问题更大。
我必须找到一种方法来通过包含从 Location 标头中检索到的插入对象的 ID 来生成 JSON 响应
从标题中,
Location: http://dbapi.io/db/coll/5a6762eb74efb71411471489
我想要回复正文:
{"_id":"5a6762eb74efb71411471489"}
在等待找到解决方案时, 我用ember addon生成客户端uuid,解决了问题
但是很遗憾没有使用mongo生成的id, 插入对象的id不是元数据
【讨论】:
不,没有这样的配置。根据 HTTP 规范,RESTHeart 通过 HTTP 标头返回 PUT 或 POST 的结果。这是有道理的,因为这些都是元数据。一般来说,HTTP 规范试图强制区分数据(通常在响应正文中)和元数据(通常在 HTTP 标头中)。
例如,以下curl 命令将 JSON 文档发布到 MongoDB 集合中:
$ curl -i -H "Content-Type: application/json" -X POST http://dbapi.io/db/coll -d '{"from":"mkjsix", "message": "MongoDB rocks!"}'
HTTP/1.1 201 Created
Server: nginx/1.9.15
Date: Tue, 23 Jan 2018 16:29:31 GMT
Content-Type: application/json
Content-Length: 0
Location: http://dbapi.io/db/coll/5a6762eb74efb71411471489
Connection: keep-alive
X-Powered-By: restheart.org
Access-Control-Expose-Headers: Location, ETag, Auth-Token, Auth-Token-Valid-Until, Auth-Token-Location, X-Powered-By
Access-Control-Allow-Origin: *
ETag: 5a6762ebc9e77c0007974479
Access-Control-Allow-Credentials: true
如您所见,Location 标头包含新创建文档的 URI,它实际上以 MongoDB 生成的对象 id 结尾。如果您改为使用 PUT 动词,那么您将自己提供 id。
【讨论】: