我正在尝试天蓝色的功能。我理解了azure函数的工作以及将函数与其他azure服务相结合所必需的绑定。
情景:
通过请求的身体将JSON发布到azure函数。将JSON存储在documentDB中并返回与响应相同的JSON。
在azure控制台中调用api时,它可以正常工作。它也适用于邮递员。但奇怪的是,它在我的反应应用程序中不起作用。
在上图中,正如您所看到的,响应是由react app中的azure函数返回的。但是正文是 ReadableStream 对象。还有一个已锁定属性。我尝试了功能和匿名授权级别。两者都给出了相同的结果。我对这个问题感到困惑。
我的想法:
我是否应该有一个对象来读取流对象,或者它是授权问题。它在postman和azure控制台中运行得非常好,但在反应应用程序中却没有。我错过了什么?
注册(POST)Azure功能
此函数获取一些请求体参数,并使用输出绑定将其存储在documentDB中。这是代码:
module.exports = function(context, req) {
context.log('Node.js HTTP trigger function processed a request. RequestUri=%s', req.originalUrl);
if (req.query.name || (req.body)) {
let eventId = req.body.eventId;
let name = req.body.name;
let purpose = req.body.purpose;
let dateArray = req.body.dateArray;
let location = req.body.location;
let eventObj = {
"id": eventId,
"name" : name,
"purpose" : purpose,
"dateArray": dateArray,
"location": location,
"attendees": []
}
context.bindings.outputDocument = eventObj;
context.res = {
// status: 200, /* Defaults to 200 */
body: eventObj
};
}
else {
context.res = {
status: 400,
body: "Please pass a name on the query string or in the request body"
};
}
context.done();
};
反应(发布到天蓝色功能)
这是一个react-redux应用程序。下面是使用一些请求体参数POST到azure函数的代码。这段代码的输出。即响应已经显示在屏幕截图中,其中无法解码响应主体。但是对于相同的http调用,postman和azure控制台都可以正常工作。
export function registerEvent(eventId, name, purpose, dateArray, location, attendees) {
return dispatch => {
return fetch('https://letsmeetup-test1.azurewebsites.net/api/HttpTriggerNodeJS2', {credentials: 'omit',
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({'eventId': eventId, 'name' : name, 'purpose' : purpose, 'dateArray': dateArray, 'location': location, 'attendees': attendees})})
.then(res => {
if (res.status !== 200) {
let status = res.status;
console.log('error in posting event');
}
console.log("printing response from azure functions");
console.log(res);
return res.json();
})
.then(json => storeEventId(json))
};
}