我正在编写一个Azure功能,使用npm模块请求调用Google API。处理body
需要调用context.done()
或者context.res
的回调超出范围(如果我在回调中设置它,然后等待我在脚本末尾通过{ {1}})。
问题是我不了解如何处理错误并将响应返回给客户端和使用回调。
欢迎对我的代码发表任何评论。我想改进。
context.done()
答案 0 :(得分:3)
在功能结束时,您不应该致电context.done()
。只有在得到结果时才会调用它(即当您检测到错误或在回调中时)。您的函数的一点重构和简化版本:
module.exports = function (context, req) {
if (!req.body) {
context.res = {
status: 400,
body: 'Nothing was received. Try {"country": "US"}'
};
context.done();
return;
}
if (!req.body.country) {
context.res = {
status: 400,
body: 'There was data but not the right kind. Try {"country": "US"}'
};
context.done();
return;
}
request.get({
url: "https://www.google.com?q=" + req.body.country
}, function (error, response, body) {
if (error) {
context.log(error);
context.res = {
status: 500,
body: "Unexpected error"
};
} else {
if (response.statusCode == 200) {
context.log(body)
}
context.res = {
status: 200,
body: "asdf"
};
}
context.done();
});
};