如何使用Node.js从Azure函数返回JSON对象

时间:2016-05-11 03:34:58

标签: json node.js azure azure-functions

使用Azure Functions,您需要做什么才能从node.js中编写的函数返回正文中的JSON对象?我可以很容易地返回一个字符串,但是当我尝试返回如下所示的json对象时,我似乎没有返回任何内容。

context.res = {
   body: jsonData,
   contentType: 'application/json'
};

6 个答案:

答案 0 :(得分:21)

根据我最近的测试(2017年3月)。您必须向响应标头显式添加内容类型以使json返回,否则数据将在浏览器中显示为XML。

  

<强> “内容类型”: “应用/ JSON”

res = {
    status: 200, /* Defaults to 200 */
    body: {message: "Hello " + (req.query.name || req.body.name)},
    headers: {
        'Content-Type': 'application/json'
    }
};

以下完整示例:

module.exports = function (context, req) {
    context.log('JavaScript HTTP trigger function processed a request.');
    context.log(context);

    if (req.query.name || (req.body && req.body.name)) {
        res = {
            // status: 200, /* Defaults to 200 */
            body: {message: "Hello " + (req.query.name || req.body.name)},
            headers: {
                'Content-Type': 'application/json'
            }
        };
    }
    else {
        res = {
            status: 400,
            body: "Please pass a name on the query string or in the request body"
        };
    }
    context.done(null, res);
};

答案 1 :(得分:7)

如果您的数据是JS对象,那么这应该可行,例如

module.exports = function(context, req) {
    context.res = {
        body: { name: "Azure Functions" }
    };
    context.done();
};

这将返回application/json响应。

如果您将数据放在json 字符串中,则可以:

module.exports = function(context, req) {
    context.res = {
        body: '{ "name": "Azure Functions" }'
    };

    context.done();
};

这将返回application/json响应,因为它会嗅到它是有效的json。

答案 2 :(得分:1)

我想补充一点。除了生成正文:JSON对象之外,请求还应包含正确的标题,告诉服务器我们感兴趣的content type。我只能通过使用URL通过浏览器调用时看到相同的Azure函数提供XML响应,但是当从Postman脚本或工具调用它会给JSON。

答案 3 :(得分:1)

我觉得已经给出了答案,但是还没有清楚地呈现出来,所以我想我也会回答,以防它有助于任何人来到我身后。我也创建了一个绝对可以返回Javascript对象的函数但是如果我在Azure函数用户界面中复制并粘贴URL并且只是在Chrome中打开一个新选项卡并尝试查看输出,我实际上得到了一个XML文档,它告诉我我有一个错误(这并不奇怪,因为Javascript中的许多字符会炸毁XML)。因此,正如其他人所提到的那样,关键是根据您的请求发送相应的标头。当您将URL复制/粘贴到浏览器中时,浏览器会发送一个类似于以下内容的请求标头:

的text / html,应用/ XHTML + xml的,应用/ XML; Q = 0.9,图像/ WEBP,/ Q = 0.8

当发生这种情况时,您会看到此链接中描述的XML返回: https://github.com/strongloop/strong-remoting/issues/118

为了解决这个问题并查看JSON请求的数据,请使用像Postman这样的实用程序: https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop?hl=en

Accept: application/json

Sample Postman Header Settings

或使用CURL命令并传入正确的Accept标头。

正如您在上面的屏幕截图中看到的,当我提供正确的标头时,我会收到我期望的JSON响应。

答案 4 :(得分:1)

module.exports = function(context,req){     context.log(&#39; JavaScript HTTP触发器功能处理了请求。&#39;);

    import java.util.Scanner;

public class SchoolHomework {
    public static void main(String args[]) {
        try (Scanner sc = new Scanner(System.in)) {
            System.out.println("Enter number only:");
            int line = sc.nextInt();
            int cnt = 1;
            int cnt2 = 0;
            while (cnt <= line) {
                cnt2 = 1;
                while (cnt2 <= line) {
                    if (cnt2 <= line) {
                        System.out.println("*");
                    } else {
                        System.out.println("#");
                    }
                    cnt2++;
                }
                System.out.println(" ");
                cnt++;
            }
        }
    }
}

答案 5 :(得分:0)

您还可以使用 JSON.stringify()从js-object中生成有效的json字符串:

jsonData = { value: "test" }:

context.res = {
   body: JSON.stringify(jsonData)
};