Azure函数:如何访问context.res.body的内容?

问题描述

在我的网站上,我对azure函数使用了POST提取请求来存储一些数据。如果函数接收到所有数据,则根据接收到的数据量,将context.res.satus设置为200,否则将其设置为400,并将context.res.body设置为确认消息:

    var returnMessage = mail ? "User entry successfully added to the database" : "Please enter a valid email";
    returnMessage = phone ? returnMessage : "Please enter a valid phone number";
    returnMessage = lName ? returnMessage : "Please provide your last name";
    returnMessage = fName ? returnMessage : "Please procide your first name";
    returnMessage = partKey ? returnMessage : "Something went wrong while generating a partition key";

    context.res = {
        status: (partKey && fName && lName && phone && mail) ? 200 : 400,body: returnMessage
    };

因此,我在我的代码调用fetch('URL',someStuff).then((res) => processResponse(res)),并且res总是返回绝对正确并传递给processResponse,如下所示:

function processResponse(response) {
    if (response.status === 200) {
        var test = JSON.stringify(response.body);
        document.getElementById("output").innerHTML = `<div class="alert alert-success" role="alert">${test}</div>`;
    }
}

如果函数接收到所有数据,则div元素“输出”将更新,如果未更新,则它不会更新,因此将response.status与200的值进行比较显然是可行的。我原本认为将变量test设置为response.body即可使用,但这不起作用,而是将变量test设置为单词“ Object”。我对JSON知之甚少,但显然我们可以使用JSON.stringify()将对象转换为字符串,因此为什么test现在是JSON.stringify(response.body),但这只是使test的值相等到一组空的方括号。在我正在研究的教程中,他们说要使用response.json(),就像这样:

function processResponse(response) {
    if (response.status === 200) {
        response.json()
            .then(function(data) {
                document.getElementById("output").innerHTML = `<div class="alert alert-success" role="alert">${data.message}</div>`;
            })
            .catch(function(){
                document.getElementById("output").innerHTML = `<div class="alert alert-success" role="alert">"Caught"</div>`;
            });
    }
}

但是,每次我尝试response.json()时,它都会失败,并且仅运行.catch()部分。发生了什么,如何访问存储在response.body中的字符串?

解决方法

如果格式不是json,则函数response.json()返回错误。您可能没有在发布请求中设置Content-Type: application/json标头! (有关更多信息,请参见HTTP Content-Type Header and JSON