带有 beta 运行时的 Javascript Azure 函数不返回错误 HTTP 响应的响应正文

Posted

技术标签:

【中文标题】带有 beta 运行时的 Javascript Azure 函数不返回错误 HTTP 响应的响应正文【英文标题】:Javascript Azure function with beta runtime does not return response body for error HTTP responses 【发布时间】:2018-12-22 12:05:13 【问题描述】:

在 beta 运行时使用 javascript Azure 函数时,我遇到了一个问题,如果函数返回成功响应 (200, 201),则从 context.res 返回的响应正文正确返回。

但是,如果 HTTP 状态设置为 400 或 404,客户端会在响应正文中获得标准响应,例如“Bad Request”,无论函数中设置了什么响应正文。

即使在自动生成的 java 脚本函数上,我也能重现这一点。

代码(标准自动生成的代码)

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();
;

对于 v1 运行时,如果在查询或请求正文中未指定名称,则 HTTP 状态设置为 400,并且响应正文正确包含“请在查询字符串或请求正文中传递名称”。

使用 beta 运行时,HTTP 状态设置为 400,但响应正文仅包含“错误请求”

对于 beta 运行时是否需要以不同的方式返回响应正文?

【问题讨论】:

【参考方案1】:

代码没问题,这是 beta 运行时的一个已知问题。

请参阅Azure Functions Runtime 2.0.11888 Announcement。

HttpTrigger 没有正确返回响应内容。例如,以下代码将返回“错误请求”而不是“请在查询字符串或请求正文中传递名称”:return new BadRequestObjectResult("Please pass a name on the query string or in the request body");

如果这是阻止程序,您可以通过将 FUNCTIONS_EXTENSION_VERSION 设置为 2.0.11857-alpha(在应用程序设置中)来使用以前的版本。

更新

这个问题已经从2.0.11933得到修复。

【讨论】:

谢谢!这非常有用。

以上是关于带有 beta 运行时的 Javascript Azure 函数不返回错误 HTTP 响应的响应正文的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 8 beta1 下载

支持所有JavaScript运行时的HTTP网络库-Fly.js

javascript函数及作用域的小结

JavaScript之this

Rails:找不到 JavaScript 运行时。有关可用运行时的列表,请参阅 https://github.com/sstephenson/execjs。 (ExecJS::RuntimeUnava

将带有 fetch 的 POST 发送到烧瓶时的端口问题