如何使用数组从App Script向Firebase发送POST请求



我正试图从应用程序脚本应用程序向firebase云函数发送POST请求。但是我无法在这个请求中正确发送数组。该请求以一种混乱的方式发送数组,以至于云功能无法正确读取

我使用以下代码:

const data = {
var1: 'string',
var2: {name: 'object'},
var3: new Date(),
var4: [1, 2, 3],
var5: [{name: 'any object'}, {name:  'inside an array'}],
}
const url = "https://us-central1-my-app.cloudfunctions.net/executeFunction";

const options = {
method: "post",
"Content-Type": "application/json", //I tried to change this content-type for other options
payload: data
};
const request = UrlFetchApp.fetch(url, options);

在服务器端,我尝试使用以下方式读取数据:

export const executeFunction = functions.https.onRequest(async(req, res) => {
//option 1
const data = JSON.parse(req.body);
res.send(JSON.stringify(data));
//option2
const data = req.body;
res.send(JSON.stringify(data);
})

但在服务器上,req.body会返回以下值:

{
"var1":"string",
"var2":{"name":"object"},
"var3":"2020-07-14T18:45:21.946Z",
"var4":[Ljava.lang.Object;@5e1b03dd, // :(
"var5":[Ljava.lang.Object;@19d93f99  // :(

如何正确获取数组值?

我怀疑它可能与字符集有关,但我已经尝试在options对象上使用"Content-Type": "application/json; charset=utf-8",但它不起作用。

关于如何解决这个问题有什么想法吗?:(

更新:

感谢@Pickachu

我不得不改变两件事:-使有效载荷字符串化-将键打开选项从"打开"更改为"打开";内容类型";至";contentType";

这里的代码:

const options = {
method: "post",
contentType: "application/json", //changed here
payload: JSON.stringify(data) //and here
};
const request = UrlFetchApp.fetch(url, options);

您几乎已经得到了。来自UrlFetcgApp的带有json有效负载的POST请求应该序列化有效负载:

https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app#fetch(字符串,对象(

const options = {
...
payload: JSON.stringify(data)
};

使用https触发器的firebase云函数会自动解析json主体,因此无需解析或字符串化

export const executeFunction = functions.https.onRequest(async(req, res) => {
const data = req.body;
console.log(data.var1);
console.log(data.var2);
console.log(data.var3);
})

相关内容

  • 没有找到相关文章

最新更新