无法解析请求对象

Unable to parse the request object

来自我的邮递员,我将在 Body 中以原始方式传递以下内容 JSON

{
    "profile": {
      "emailAddress": "john@gmail.com",
      "givenName": "John",
      "firstName": "John",
      "lastName": "Thomas",
      "profileePic": null
    }
}

但是,我的 JavaScript 代码出现问题,因为我无法解析配置文件对象中的 emailAddress、givenName 等属性。当我在 AWS CloudWatch

上看到它时出现以下错误
2022-01-08T18:52:33.723+05:30   START RequestId: d0e38c52-a7d6-40dd-afac-c06d2ab201d8 Version: $LATEST

2022-01-08T18:52:33.834+05:30   info: event: {"body":"{\n \"profile\": {\n \"emailAddress\": \"john@gmail.com\",\n \"givenName\": \"John\",\n \"firstName\": \"John\",\n \"lastName\": \"Thomas\",\n \"profileePic\": null\n }\n}\n","headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate, br","CloudFront-Forwarded-Proto":"https","CloudFront-Is-Desktop-Viewer":"true","CloudFront-Is-Mobile-Viewer":"false","CloudFront-Is-SmartTV-Viewer":"false","CloudFront-Is-Tablet-Viewer":"false","CloudFront-Viewer-Country":"IN","Content-Type":"application/json","Host":"rukq81brsl.execute-api.ap-southeast-1.amazonaws.com","Postman-Token":"f206f469-e8fc-44c7-ab50-91082c0c7073","User-Agent":"PostmanRuntime/7.28.4","Via":"1.1 a0182542bde1ac9ec73dcf86004da8fc.cloudfront.net (CloudFront)","X-Amz-Cf-Id":"5Q-dEIt0WSWNAbpwXgapJNyt-zbVAyEjTDMVt_OONS4swLH1JJ_g9g==","X-Amzn-Trace-Id":"Root=1-61d99018-6935ebc455a3ca2b69a82bd2","X-Forwarded-For":"223.190.90.66, 64.252.163.138","X-Forwarded-Port":"443","X-Forwarded-Proto":"https"},"httpMethod":"POST","isBase64Encoded":false,"multiValueHeaders":{"Accept":["*/*"],"Accept-Encoding":["gzip, deflate, br"],"CloudFront-Forwarded-Proto":["https"],"CloudFront-Is-Desktop-Viewer":["true"],"CloudFront-Is-Mobile-Viewer":["false"],"CloudFront-Is-SmartTV-Viewer":["false"],"CloudFront-Is-Tablet-Viewer":["false"],"CloudFront-Viewer-Country":["IN"],"Content-Type":["application/json"],"Host":["rukq81brsl.execute-api.ap-southeast-1.amazonaws.com"],"Postman-Token":["f206f469-e8fc-44c7-ab50-91082c0c7073"],"User-Agent":["PostmanRuntime/7.28.4"],"Via":["1.1 a0182542bde1ac9ec73dcf86004da8fc.cloudfront.net (CloudFront)"],"X-Amz-Cf-Id":["5Q-dEIt0WSWNAbpwXgapJNyt-zbVAyEjTDMVt_OONS4swLH1JJ_g9g=="],"X-Amzn-Trace-Id":["Root=1-61d99018-6935ebc455a3ca2b69a82bd2"],"X-Forwarded-For":["223.190.90.66, 64.252.163.138"],"X-Forwarded-Port":["443"],"X-Forwarded-Proto":["https"]},"multiValueQueryStringParameters":null,"path":"/user/validation","pathParameters":null,"queryStringParameters":null,"requestContext":{"accountId":"195725532069","apiId":"rukq81brsl","domainName":"rukq81brsl.execute-api.ap-southeast-1.amazonaws.com","domainPrefix":"rukq81brsl","extendedRequestId":"LoNz7HiuyQ0FlIA=","httpMethod":"POST","identity":{"accessKey":null,"accountId":null,"caller":null,"cognitoAuthenticationProvider":null,"cognitoAuthenticationType":null,"cognitoIdentityId":null,"cognitoIdentityPoolId":null,"principalOrgId":null,"sourceIp":"223.190.90.66","user":null,"userAgent":"PostmanRuntime/7.28.4","userArn":null},"path":"/dev/user/validation","protocol":"HTTP/1.1","requestId":"b95ffa2b-12eb-43fe-8f36-87a071713268","requestTime":"08/Jan/2022:13:22:32 +0000","requestTimeEpoch":1641648152994,"resourceId":"gso8zl","resourcePath":"/user/validation","stage":"dev"},"resource":"/user/validation","service":"user-service","stageVariables":null}

2022-01-08T18:52:33.834+05:30   info: event.body:: {"service":"user-service"}

2022-01-08T18:52:33.834+05:30   info: event.body.profile:: {"service":"user-service"}

2022-01-08T18:52:33.834+05:30   info: profile: {"service":"user-service"}

2022-01-08T18:52:33.835+05:30   2022-01-08T13:22:33.835Z d0e38c52-a7d6-40dd-afac-c06d2ab201d8 ERROR Invoke Error {"errorType":"TypeError","errorMessage":"Cannot read property 'emailAddress' of undefined","stack":["TypeError: Cannot read property 'emailAddress' of undefined"," at Runtime.exports.lambdaHandler [as handler] (/var/task/app.js:31:34)"," at Runtime.handleOnce (/var/runtime/Runtime.js:66:25)"]}

2022-01-08T18:52:33.893+05:30   END RequestId: d0e38c52-a7d6-40dd-afac-c06d2ab201d8

更奇怪的是,event.body 被解析为 {"service":"user-service"} 我在这里期待配置文件对象。

这是我的 Lambda(使用 Node.js 运行时在 JavaScript 中编写)代码,供我尝试解析事件时参考

exports.lambdaHandler = async (event, context) => {
  logger.info('event:', event);
  let body, data;
    let statusCode = 200;
    const headers = {
      'Content-Type': 'application/json',     
      'Access-Control-Allow-Headers': 'Content-Type',
      'Access-Control-Allow-Origin': '*',
      'Access-Control-Allow-Methods': '*'
    };

    logger.info('event.body::', event.body);
    logger.info('event.body.profile::', event.body.profile);

    const profile = event.body.profile;
    logger.info('profile:', profile);

    const emailAddress = profile.emailAddress;
    const hash = md5(emailAddress.trim().toLowerCase());

我尝试了很多调试,但还没有找到任何具体的东西。

你的Event中的body是一个String,不是Object,你首先要用JSON.parse()函数解析它,然后从返回的Object中提取profile

const event = {"body":"{\n \"profile\": {\n \"emailAddress\": \"john@gmail.com\",\n \"givenName\": \"John\",\n \"firstName\": \"John\",\n \"lastName\": \"Thomas\",\n \"profileePic\": null\n }\n}\n","headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate, br","CloudFront-Forwarded-Proto":"https","CloudFront-Is-Desktop-Viewer":"true","CloudFront-Is-Mobile-Viewer":"false","CloudFront-Is-SmartTV-Viewer":"false","CloudFront-Is-Tablet-Viewer":"false","CloudFront-Viewer-Country":"IN","Content-Type":"application/json","Host":"rukq81brsl.execute-api.ap-southeast-1.amazonaws.com","Postman-Token":"f206f469-e8fc-44c7-ab50-91082c0c7073","User-Agent":"PostmanRuntime/7.28.4","Via":"1.1 a0182542bde1ac9ec73dcf86004da8fc.cloudfront.net (CloudFront)","X-Amz-Cf-Id":"5Q-dEIt0WSWNAbpwXgapJNyt-zbVAyEjTDMVt_OONS4swLH1JJ_g9g==","X-Amzn-Trace-Id":"Root=1-61d99018-6935ebc455a3ca2b69a82bd2","X-Forwarded-For":"223.190.90.66, 64.252.163.138","X-Forwarded-Port":"443","X-Forwarded-Proto":"https"},"httpMethod":"POST","isBase64Encoded":false,"multiValueHeaders":{"Accept":["*/*"],"Accept-Encoding":["gzip, deflate, br"],"CloudFront-Forwarded-Proto":["https"],"CloudFront-Is-Desktop-Viewer":["true"],"CloudFront-Is-Mobile-Viewer":["false"],"CloudFront-Is-SmartTV-Viewer":["false"],"CloudFront-Is-Tablet-Viewer":["false"],"CloudFront-Viewer-Country":["IN"],"Content-Type":["application/json"],"Host":["rukq81brsl.execute-api.ap-southeast-1.amazonaws.com"],"Postman-Token":["f206f469-e8fc-44c7-ab50-91082c0c7073"],"User-Agent":["PostmanRuntime/7.28.4"],"Via":["1.1 a0182542bde1ac9ec73dcf86004da8fc.cloudfront.net (CloudFront)"],"X-Amz-Cf-Id":["5Q-dEIt0WSWNAbpwXgapJNyt-zbVAyEjTDMVt_OONS4swLH1JJ_g9g=="],"X-Amzn-Trace-Id":["Root=1-61d99018-6935ebc455a3ca2b69a82bd2"],"X-Forwarded-For":["223.190.90.66, 64.252.163.138"],"X-Forwarded-Port":["443"],"X-Forwarded-Proto":["https"]},"multiValueQueryStringParameters":null,"path":"/user/validation","pathParameters":null,"queryStringParameters":null,"requestContext":{"accountId":"195725532069","apiId":"rukq81brsl","domainName":"rukq81brsl.execute-api.ap-southeast-1.amazonaws.com","domainPrefix":"rukq81brsl","extendedRequestId":"LoNz7HiuyQ0FlIA=","httpMethod":"POST","identity":{"accessKey":null,"accountId":null,"caller":null,"cognitoAuthenticationProvider":null,"cognitoAuthenticationType":null,"cognitoIdentityId":null,"cognitoIdentityPoolId":null,"principalOrgId":null,"sourceIp":"223.190.90.66","user":null,"userAgent":"PostmanRuntime/7.28.4","userArn":null},"path":"/dev/user/validation","protocol":"HTTP/1.1","requestId":"b95ffa2b-12eb-43fe-8f36-87a071713268","requestTime":"08/Jan/2022:13:22:32 +0000","requestTimeEpoch":1641648152994,"resourceId":"gso8zl","resourcePath":"/user/validation","stage":"dev"},"resource":"/user/validation","service":"user-service","stageVariables":null}

let {profile} = JSON.parse(event.body) // extract profile from returned Object

console.log(profile.givenName)