Azure Function App中JavaScript无法读取Post请求Body的问题
解决Azure Functions中无法读取POST请求Body的问题
嘿,我之前在早期Azure Functions的beta版本+Node 6环境里踩过这个坑!你的代码逻辑本身没毛病,但旧版运行时默认不会自动解析POST请求的JSON Body,这是当时的一个限制。给你两个解决方案,按需选择:
方案1:手动解析原始请求体(适配当前旧环境)
在Node 6.x搭配beta运行时的环境中,req.body不会被自动解析,你得从req.rawBody拿到原始的请求体字符串,手动转成JSON。修改你的index.js代码如下:
module.exports = function (context, req) { context.log('JavaScript HTTP trigger function processed a request.'); let requestName; // 优先取URL参数里的name if (req.query.name) { requestName = req.query.name; } // 处理POST请求的Body else if (req.rawBody) { try { // 手动解析JSON格式的请求体 const body = JSON.parse(req.rawBody); requestName = body.name; } catch (err) { context.res = { status: 400, body: "Invalid JSON body provided." }; context.done(); return; } } if (requestName) { context.res = { body: "Hello " + requestName }; } else { context.res = { status: 400, body: "Please pass a name on the query string or in the request body." }; } context.done(); }
另外要注意:发送POST请求时,一定要把请求头的Content-Type设为application/json,不然解析会失败哦。
方案2:升级运行时版本(推荐,一劳永逸)
你现在用的beta版本和Node 6.5.0都是非常老旧的版本了,Node 6早就停止官方支持,Azure Functions的beta运行时也有很多已知问题。建议直接升级到稳定版:
- 登录Azure门户,打开你的Function App
- 进入「配置」->「应用程序设置」
- 把
FUNCTIONS_EXTENSION_VERSION改成~4(当前的稳定主版本) - 把
WEBSITE_NODE_DEFAULT_VERSION改成18.x或更高的支持版本(比如20.x) - 重启Function App
升级之后,新版运行时会自动解析JSON请求体,你原来的代码就能直接读取req.body了,而且后续还能享受到更多新特性和安全更新。
内容的提问来源于stack exchange,提问作者Christophe PHU
相关产品推荐
相关产品推荐

