You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 13:05:55