You need to enable JavaScript to run this app. 使用Amazon DynamoDB scan操作时报JSON位置0处意外字符u错误
优惠活动
大模型
产品
解决方案
定价
更多

使用Amazon DynamoDB scan操作时报JSON位置0处意外字符u错误

问题根因

错误"Unexpected token u in JSON at position 0"的本质是代码尝试对undefined执行JSON.parse操作:

  • GET类型的请求不会携带请求体,因此调用GET /items接口时,event.body的值为undefined
  • 你的代码在进入路由判断前,全局执行了let requestJSON = JSON.parse(event.body);,此时直接触发解析错误,还没走到GET /items的路由逻辑就进入catch分支报错了。
修复方案

将JSON.parse操作移到需要请求体的PUT路由内部执行即可,同时附带修复PUT /signOut接口返回提示文案写反的问题,修改后完整代码如下:

const AWS = require("aws-sdk");

const dynamo = new AWS.DynamoDB.DocumentClient();

exports.handler = async(event, context) => {
  let body;
  let statusCode = 200;
  const headers = {
    "Content-Type": "application/json"
  };

  try {
    switch (event.routeKey) {
      case "GET /items":
        body = await dynamo.scan({
            TableName: "users"
          })
          .promise();
        break;
      case "PUT /signIn": {
        // 仅在需要请求体的路由内解析body
        const requestJSON = JSON.parse(event.body);
        await dynamo
          .update({
            TableName: "users",
            Key: {
              UserId: requestJSON.UserId
            },
            UpdateExpression: "set SignedInAt = :a, IsSignedIn = :b, SignedOutAt = :c",
            ExpressionAttributeValues: {
              ":a": new Date().toLocaleTimeString(),
              ":b": true,
              ":c": ""
            }
          })
          .promise();
        body = `User ${requestJSON.UserId} has been signed in.`;
        break;
      }
      case "PUT /signOut": {
        const requestJSON = JSON.parse(event.body);
        await dynamo
          .update({
            TableName: "users",
            Key: {
              UserId: requestJSON.UserId
            },
            UpdateExpression: "set SignedOutAt = :a, IsSignedIn = :b",
            ExpressionAttributeValues: {
              ":a": new Date().toLocaleTimeString(),
              ":b": false,
            }
          })
          .promise();
        // 修复返回提示文案错误
        body = `User ${requestJSON.UserId} has been signed out.`;
        break;
      }
      default:
        throw new Error(`Unsupported route: "${event.routeKey}"`);
    }
  }
  catch (err) {
    statusCode = 400;
    body = err.message;
  }
  finally {
    body = JSON.stringify(body);
  }

  return {
    statusCode,
    body,
    headers
  };
};

内容的提问来源于stack exchange,提问作者Clancinio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 00:36:09