从azure函数解码响应体

时间:2016-10-04 01:38:05

标签: node.js azure reactjs response azure-functions

我正在尝试天蓝色的功能。我理解了azure函数的工作以及将函数与其他azure服务相结合所必需的绑定。

情景:

通过请求的身体将JSON发布到azure函数。将JSON存储在documentDB中并返回与响应相同的JSON。

在azure控制台中调用api时,它可以正常工作。它也适用于邮递员。但奇怪的是,它在我的反应应用程序中不起作用。

问题: response in react app

在上图中,正如您所看到的,响应是由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))
  };
}

0 个答案:

没有答案