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

如何在DynamoDB返回空响应时返回错误状态码?

解决方案

一、状态码选择:优先用404

当请求的目标资源(即DynamoDB中对应指定id的条目)不存在时,返回404 Not Found是符合REST规范的。204 No Content适用于请求成功但确实无内容返回的场景(比如删除资源成功后无需返回数据),但资源不存在属于客户端请求的资源本身不存在,用404更贴合语义。

二、更优雅的实现方式

DynamoDB的get操作返回的响应对象中,仅当查询到有效数据时才会包含Item字段;未查询到数据时,Item属性为undefined。直接检查这个字段比遍历对象键更准确高效——因为响应里默认会包含ResponseMetadata等系统字段,用Object.keys(body).length判断容易出现误判。

优化后的代码示例:

export const handler: Handler = async (event, context) => {
  let body;
  let statusCode = 200;
  const headers = {
    "Access-Control-Allow-Origin": "*",
    "Access-Control-Allow-Headers":
      "Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token",
    "Content-Type": "application/json",
  };

  try {
    const response = await dynamo
      .get({
        TableName: "Table",
        Key: {
          id: event.pathParameters.id,
        },
      })
      .promise();
    
    // 直接判断Item是否存在
    if (!response.Item) {
      statusCode = 404;
      body = { message: "指定的资源不存在" };
    } else {
      body = response.Item;
    }
  } catch (err: any) {
    statusCode = 400;
    body = { message: err.message };
  } finally {
    body = JSON.stringify(body);
  }

  return {
    statusCode,
    body,
    headers,
  };
};

三、关于DynamoDB不抛出错误的说明

这是DynamoDB的设计预期:查询不存在的键不属于异常场景,只是查询结果为空,因此不会主动抛出错误,需要开发者自行判断结果并做对应处理。

内容的提问来源于stack exchange,提问作者J. Doe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 21:40:23