使用Azure Functions,您需要做什么才能从node.js中编写的函数返回正文中的JSON对象?我可以很容易地返回一个字符串,但是当我尝试返回如下所示的json对象时,我似乎没有返回任何内容。
context.res = {
body: jsonData,
contentType: 'application/json'
};
答案 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
或使用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)
};