azure function app javascript 无法读取 Post 请求的正文

Posted

技术标签:

【中文标题】azure function app javascript 无法读取 Post 请求的正文【英文标题】:azure function app javascript can not read Post request's body 【发布时间】:2018-09-23 21:40:45 【问题描述】:

我正在使用 Azure Function App 部署此示例代码:

FUNCTIONS_EXTENSION_VERSION=测试版

WEBSITE_NODE_DEFAULT_VERSION=6.5.0

index.js:

module.exports = function (context, req) 
context.log('javascript HTTP trigger function processed a request.');

if (req.query.name || (req.body && req.body.name)) 
    context.res = 
        // status: 200, /* Defaults to 200 */
        body: "Hello " + (req.query.name || req.body.name)
    ;

else 
    context.res = 
        status: 400,
        body: "Please pass a name on the query string or in the request body"
    ;

context.done(); ;

function.json:

 "disabled": false, "bindings": [

  "authLevel": "anonymous",
  "type": "httpTrigger",
  "direction": "in",
  "name": "req"
,

  "type": "http",
  "direction": "out",
  "name": "res"
]

在本地开发中,一切正常。

部署后,请求 POST 的主体为“未定义”

调用函数的简单请求: - 内容类型:应用程序/json


"name":"John"
 

日志:

 method: 'POST',
  url: '/api/MyHttpTrigger',
  originalUrl: '/api/MyHttpTrigger',
  headers: 
    connection: 'close',
     'transfer-encoding': 'chunked',
     accept: 'application/json, text/plain, */*',
     authorization: 'Bearer------',
     expect: '100-continue',
     host: 'dev-we-function-test-api.azurewebsites.net',
     'max-forwards': '10',
     'user-agent': 'axios/0.16.2',
     'x-client-ip': '52.143.137.149',
     'x-client-port': '16079',
     'request-context': 'appId=cid-v1:5443f5a3-02cd-43d3-90d6-1942e07580a1,roleName=Web',
     'request-id': '|rtHs1.ca2e9979_1310.',
     'x-ms-request-id': 'rtHs1',
     'x-ms-request-root-id': '|rtHs1.ca2e9979_1310.',
     'x-waws-unencoded-url': '/api/MyHttpTrigger?code=NhpwrmvOjo809ryOvkzbbBa9B1/Hqj18FoVw9faqq8eKSaoDk4oyeg==',
     'client-ip': '52.143.137.149:16079',
     'is-service-tunneled': '0',
     'x-arr-log-id': 'c2b5dbe9-4193-4b81-821a-8ad2054a1203',
     'disguised-host': 'dev-we-function-test-api.azurewebsites.net',
     'x-site-deployment-id': 'dev-we-function-test-api',
     'was-default-hostname': 'dev-we-function-test-api.azurewebsites.net',
     'x-original-url': '/api/MyHttpTrigger?code=NhpwrmvOjo809ryOvkzbbBa9B1/Hqj18FoVw9faqq8eKSaoDk4oyeg==',
     'x-forwarded-for': '52.143.137.149:16079',
     'x-arr-ssl': '2048|256|C=US, S=Washington, L=Redmond, O=Microsoft Corporation, OU=Microsoft IT, CN=Microsoft IT TLS CA 4|CN=*.azurewebsites.net',
     'x-forwarded-proto': 'https' ,
  query: 
    code: 'NhpwrmvOjo809ryOvkzbbBa9B1/Hqj18FoVw9faqq8eKSaoDk4oyeg==' ,
  params: ,
  body: undefined 

帮助....

【问题讨论】:

您使用的是V1还是V2的功能,您运行的是Windows还是Linux版本? 如果您使用的是 v2,您的 WEBSITE_NODE_DEFAULT_VERSION 应用设置是什么意思? 是的,我正在使用 V2,WEBSITE_NODE_DEFAULT_VERSION=6.5.0。 (Linux版) 【参考方案1】:

重现我这边的错误。

已经做了一些测试来找出原因。

在 Windows 应用服务计划中有效。 在 linux 中,C#(csx) HttpTrigger 有效。 尽管应用设置中的默认值为 6.5.0,但发现节点版本为 8.9.0。用8.9.0在widows版本测试,也可以。

因此,对于 linux 应用服务计划(预览版)中的 js 功能,从我的角度来看,请求正文要么丢失,要么无法解析。这似乎是linux版本的语言支持问题,因为整个部署是一个模板,并且没有关于json数据不支持作为请求体的提示。

更新

这个问题似乎解决了,在运行时 2.0.1.0 (beta) for linux 上测试。

【讨论】:

以上是关于azure function app javascript 无法读取 Post 请求的正文的主要内容,如果未能解决你的问题,请参考以下文章

azure functions 或 azure logic app 中是不是有任何触发 Azure File Share 的触发器?

从 Azure Function App 访问带有防火墙的 Azure Blob 存储

随机 Azure Function Apps 故障:超出主机阈值 [连接数]

Azure Blob Storage V2,来自 Azure Function App 的异常 API 调用,升级后

Azure Function App 不由事件中心触发

Azure Function App 对 Webhook 的初始响应