指定自定义ID向Couchbase Sync Gateway POST文档报错:Method Not Allowed
解决Couchbase Sync Gateway指定自定义ID时POST请求失败的问题
我帮你捋清楚这个问题哈——这其实是Sync Gateway API的设计规则导致的:当你要指定自定义文档ID时,不能用POST请求,必须改用PUT请求。
原因分析
Sync Gateway的HTTP API有明确的分工:
- 使用
POST /{数据库名}:让服务器自动生成文档ID,创建新文档 - 使用
PUT /{数据库名}/{自定义ID}:指定ID来创建新文档,或者更新已存在的该ID文档
你之前用POST指定ID的方式不符合API规范,所以才会返回Method Not Allowed错误。
代码修改示例
假设你原来的POST请求代码大概是这样(简化版):
const request = require('request'); // 原来的POST请求(不指定ID正常,指定ID失败) request.post({ url: 'http://your-sync-gateway-url/db-name', json: true, body: { // 你的文档内容 name: "test", type: "example" // 这里如果加了"_id": "my-custom-id"就会报错 } }, (err, res, body) => { if (err) console.error(err); console.log(body); });
现在改成PUT请求,把自定义ID放到URL路径里:
const request = require('request'); const customDocId = "my-custom-id"; // 你的自定义文档ID request.put({ url: `http://your-sync-gateway-url/db-name/${customDocId}`, json: true, body: { // 你的文档内容,不需要再放_id字段 name: "test", type: "example" } }, (err, res, body) => { if (err) console.error(err); console.log(body); });
额外注意事项
- 如果是更新已存在的文档,需要在请求体里带上该文档的
_rev字段(可以从之前的GET请求或创建响应里获取),否则会返回冲突错误 - 确保Sync Gateway的配置文件中,当前用户对目标bucket有足够的读写权限,避免权限相关的报错
内容的提问来源于stack exchange,提问作者mandy Yiu
相关产品推荐
相关产品推荐

