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

Lambda函数无法提取Angular请求的JSON数据问题求助

问题分析与解决方法

核心问题

你现在的问题出在两个关键环节:

  • Angular端重复序列化请求体,导致Lambda收到的是字符串格式的JSON,而非可直接访问的对象
  • Lambda端未解析请求体字符串,直接从event上取属性自然取不到

修正步骤

1. 修正Angular代码

Angular的HttpClient.post会自动把传入的JavaScript对象序列化为JSON字符串,你手动调用JSON.stringify(body)会让请求体变成「字符串的字符串」(比如"{\"DynamicSend1\":\"xxx\"}"),完全多此一举。直接传body对象即可:

let finalMessage = (message + " - " + signature).toString();

const headers = new HttpHeaders({ 'Content-Type': 'application/json' })
const body = { DynamicSend1: finalMessage };

// 去掉JSON.stringify,直接传入body对象
this.http.post(this.lambdaEndpoint, body, { headers }).subscribe(
  (response) => {
    console.log('Lambda response:', response);
    this.success = true;
    this.resetAll();
  },
  (error) => {
    console.error('Error calling Lambda:', error);
    this.error = true;
    this.resetAll();
  }
);

2. 修正Lambda代码

Lambda收到的event.body是JSON格式的字符串,必须先通过JSON.parse解析为JavaScript对象,才能访问DynamicSend1属性:

'use strict';
exports.handler = async (event, context) => {
  context.callbackWaitsForEmptyEventLoop = false;
  
  // 解析请求体字符串为可操作的对象
  const requestBody = JSON.parse(event.body);
  // 现在可以正常获取DynamicSend1的值
  const dynamicSendData = requestBody.DynamicSend1;
  
  const response = {
    statusCode: 200,
    headers: {
      "Access-Control-Allow-Origin": "*",
      "Access-Control-Allow-Headers" : "Content-Type",
      "Access-Control-Allow-Methods" : "GET,POST,OPTIONS,HEAD",
    },
    body: JSON.stringify({ receivedData: dynamicSendData }),
  };
  
  return response;
};

额外说明

如果你之前确认请求体已传入Lambda,可以先打印typeof event.body,会发现它是string类型而非对象——这就是直接用event.DynamicSend1取不到值的根本原因。

内容的提问来源于stack exchange,提问作者d-4ra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 19:12:19