Azure函数调用JSON Body为undefined及401过期令牌问题排查
Node.js Azure函数调用同语言函数的Body未定义与401令牌过期问题
我在测试Node.js编写的Azure函数调用另一个同语言Azure函数的场景:
- 用Postman发起请求时,接收端能正常获取JSON Body;
- 通过函数应用发起HTTPS POST请求时,接收端函数日志显示Body为
undefined; - 修改调用端代码后,又出现401错误,错误提示如下:
{ "error": { "code": "ExpiredAuthenticationToken", "message": "The access token expiry UTC time '12/26/2022 6:39:13 PM' is earlier than current UTC time '12/26/2022 6:44:34 PM'." } }
调用端初始代码
const https = require('https'); module.exports = async function (context, req) { context.log('JavaScript HTTP trigger function processed a request.'); var urlHostname = "receiving-app.azurewebsites.net" var urlPath = "/api/receiving-app?code=secret" var options = { hostname: urlHostname, port: 443, path: urlPath, method: "POST", headers: { "Content-Type": "application/json", } }; const request = https.request(options, (response) => { context.log(`statusCode: ${response.statusCode}`) response.on('data', (data) => { context.log('response data: ${data}') }) }) request.on('error', (error) => { context.log(error) }) const payload = { name: "test" } context.log('payload: ' + JSON.stringify(payload)) request.write(JSON.stringify(payload)) request.end() context.res = { // status: 200, /* Defaults to 200 */ body: "done" }; }
接收端代码
module.exports = async function (context, req) { context.log('JavaScript HTTP trigger function processed a request.'); context.log(context.req); context.log(req.body); context.res = { // status: 200, /* Defaults to 200 */ body: "Hello " }; }
修改后的调用端代码
const https = require('https'); module.exports = async function (context, req) { context.log('JavaScript HTTP trigger function processed a request.'); var urlHostname = "xxxxx.azurewebsites.net" var urlPath = "/api/xxxxx?code=xxxxxxxxx" var options = { hostname: urlHostname, port: 443, path: urlPath, method: "POST", headers: { "Content-Type": "application/json", } }; var request = https.request(options, function (res) { console.log("STATUS: " + res.statusCode); console.log("HEADERS: " + JSON.stringify(res.headers)); res.setEncoding("utf8"); res.on("data", function (chunk) { console.log("BODY: " + chunk); }); }); request.on("error", function (e) { console.log("Problem with request: " + e); }); // write data to request body var payload = { id: 12345, value: "abc-def-ghi", }; request.write(JSON.stringify(payload)); request.end(); context.res = { // status: 200, /* Defaults to 200 */ body: "done" }; }
内容的提问来源于stack exchange,提问作者Locks
相关产品推荐
相关产品推荐

