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
相关产品推荐
相关产品推荐

