带有 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 响应的响应正文的主要内容,如果未能解决你的问题,请参考以下文章
支持所有JavaScript运行时的HTTP网络库-Fly.js
Rails:找不到 JavaScript 运行时。有关可用运行时的列表,请参阅 https://github.com/sstephenson/execjs。 (ExecJS::RuntimeUnava