如何修复MongoDB Data API误报“缺少Content-Type头部”的问题
解决MongoDB Data API错误提示"Header missing"的实际问题
在使用Deluge脚本通过MongoDB Data API向MongoDB Atlas插入文档时,明明已经在请求头中指定了Content-Type: application/json,却持续收到错误:
Header missing: please add content-type: application/json or application/ejson to specify payload data types
原错误代码
// POST to MongoDB Data API headers = Map(); headers.put("Content-Type", "application/json"); headers.put("api-key", "API-KEY"); headers.put("Access-Control-Request-Headers", "*"); data = Map(); data.put("dataSource", "cluster"); data.put("database", "database"); data.put("collection", "names"); document = Map(); document.put("full_name", "Ari Adar"); data.put("document", document); response = invokeurl [ url: "https://ap-southeast-2.aws.data.mongodb-api.com/app/data-***/endpoint/data/v1/action/insertOne" type: POST parameters: data.toString() headers: headers ]; alert response;
问题分析
调试后发现,MongoDB Data API的错误提示并不准确——问题并非请求头缺失,而是传入invokeurl的参数没有正确以JSON字符串形式传递。原代码中直接在parameters字段使用data.toString(),因Deluge语法特性导致实际传递的格式不符合API要求。
修复后代码
// POST to MongoDB Data API headers = Map(); headers.put("Content-Type", "application/json"); headers.put("api-key", "API-KEY"); headers.put("Access-Control-Request-Headers", "*"); data = Map(); data.put("dataSource", "cluster"); data.put("database", "database"); data.put("collection", "names"); document = Map(); document.put("full_name", "Ari Adar"); data.put("document", document); // Stringify the data map data_string = data.toString(); response = invokeurl [ url: "https://ap-southeast-2.aws.data.mongodb-api.com/app/data-***/endpoint/data/v1/action/insertOne" type: POST parameters: data_string headers: headers ]; alert response;
修复说明
将数据Map先赋值给变量data_string,再传入invokeurl的parameters字段,确保传递的是标准JSON字符串,符合MongoDB Data API的接收要求。
内容的提问来源于stack exchange,提问作者Ari Adar
相关产品推荐
相关产品推荐

