如何修复 MongoDB 数据 API 错误:“缺少标头:请添加内容类型:application/json 或 application/ejson 以指定有效负载数据类型”

问题描述 投票:0回答:0

我试图通过数据 API 将文档插入 MongoDB Atlas。

然而,API一直返回以下错误:

缺少标头:请添加内容类型:application/json 或 application/ejson 以指定有效负载数据类型。

这是出乎意料的。正如您在下面的 deluge 脚本中看到的,“Content-Type”是在标头中指定的:

原码

// 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;

经过一番调试,终于发现Data API的error response是不准确的

解决方案是脚本必须先将数据映射转换为 JSON 字符串,然后再将其传递给 invokeURL 函数。

工作代码

// 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;

我希望这可以帮助其他遇到相同错误消息的人。要是 MongoDB 能更新就好了

mongodb mongodb-query mongodb-atlas zoho zoho-deluge
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.