You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Cosmos DB服务端JS post-trigger中获取响应的etag header

Cosmos DB服务端Post-Trigger获取ETag报错解决方案

核心报错原因

你调用getValue时传入的header键名不符合服务端runtime的预期:
Cosmos DB数据库内运行的JS触发器的Response.getValue()方法对响应头键名大小写敏感,你使用的小写"etag"不是正确的键名,正确的ETag头键名为大写开头的"ETag"。

修复代码

直接修改键名即可正常读取:

// Retrieve item's new etag from the response
var newETag = __.response.getValue("ETag");

特殊场景兼容(修改键名后仍报错)

如果你的请求固定设置了EnableContentResponseOnWrite = false,修改键名后仍然读取失败,是因为该配置会让服务端跳过填充非必要的响应元数据,ETag头不会暴露到触发器的Response对象中,可选择以下两种方案解决:

  • 方案1:仅针对需要触发该触发器的写入请求,单独将EnableContentResponseOnWrite设为true。该配置仅影响当前请求的客户端响应,不会全局修改业务逻辑,是成本最低的修复方式。
  • 方案2:无需修改客户端参数,直接在触发器内部查询刚写入的文档获取ETag,参考代码如下:
// 从请求上下文获取刚写入文档的id和分区键值
var writtenDocId = __.request.getBody().id;
var docPartitionKey = __.request.getBody().你的分区键字段名;

// 服务端内部查询最新文档元数据
var queryAccepted = __.readDocument(
    `${__.getSelfLink()}docs/${writtenDocId}`,
    { partitionKey: docPartitionKey },
    function(err, latestDoc) {
        if (err) throw err;
        // 直接从文档属性获取etag
        var newETag = latestDoc._etag;
        // 后续业务逻辑
    }
);
if (!queryAccepted) throw new Error("触发器执行失败:读取文档请求未被服务端接受");

内容的提问来源于stack exchange,提问作者Gilles jr Bisson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 12:18:03