JavaScript:Azure函数blob绑定处理异常

JavaScript:Azure函数blob绑定处理异常,javascript,azure,azure-functions,azure-blob-storage,Javascript,Azure,Azure Functions,Azure Blob Storage,您好,我已经创建了一个azure函数httptrigger,用于从具有blob输入绑定的blob存储中读取blob 下面是function.json: { "disabled": false, "bindings": [ { "authLevel": "anonymous", "type": "httpTrigger", "direction": "in", "name": "req" }, { "nam

您好,我已经创建了一个azure函数httptrigger,用于从具有blob输入绑定的blob存储中读取blob

下面是function.json:

{
  "disabled": false,
  "bindings": [
    {
      "authLevel": "anonymous",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req"
    },
    {
      "name" : "blobContent",
      "type": "blob",
      "direction": "in",
      "path": "containerName/{id}.{extn}",
       "connection": "AzureWebJobsStorage"
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    }
  ]
}
index.js文件是:


我使用get和post方法调用httptrigger。因为我使用的是blob输入绑定,所以在处理index.js之前检索内容。这样,我无法验证API是否使用id和extn调用。是否有方法处理异常并将消息返回给API调用方以传递必要的参数。提前谢谢

所以函数确实有这样做的方法,称为。此功能允许您编写在运行作业函数之前或之后调用的方法(调用筛选器),或在函数运行时代码遇到异常时调用的方法(异常筛选器)。您可以编写一个异常过滤器,在输入绑定失败时捕获异常,这将实现您想要的功能


不幸的是,在编写此答案时,函数过滤器仅与预编译的C#函数兼容。当前有此跟踪功能添加到其他场景中。

如果您在HTTP有效负载中传递blob名称(读取请求正文-->您的自定义逻辑-->blob客户端-->获取blob并返回),则始终可以使用Azure Storage SDK中的blob客户端。谢谢您提供的信息。使用Azure SDK与绑定之间是否存在性能差异?否。在幕后使用相同的SDK。这是为了方便,而不是为了表演。主机和语言工作人员之间涉及到一些gRPC,但在大多数情况下,这几乎没有开销。因此,如果说有什么区别的话,直接使用存储SDK应该会快一点,但只会稍微快一点。感谢您提供宝贵的信息。谢谢你,康纳。感谢您的回复。这是否意味着如果我们想使用Javascript,现在就必须坚持使用SDK。使用绑定和Azure SDK有什么性能差异吗?不应该有。我相信我们的绑定只是在幕后使用C#Azure存储SDK。再次感谢Connor。感谢您的回复。
module.exports = function (context, req) {
    context.log('JavaScript HTTP trigger function processed a request.');

    if (req.query.id || (req.body && req.body.id)) {   
        context.res = {
            body : {'data' : context.bindings.blobContent},
            headers : {'Content-type': 'application/xml"'}
        }
    }
    else {
        context.res = {
            status: 400,
            body: "Please pass a object/chuck id on the query string or in the request body"
        };
    }
    context.done(null,context.res);
};