当我在Postman上运行终端节点时,它可以正常工作并返回其发布的结果,但是当我在AWS lambda上使用TEST时,它将返回错误“ JSON位置0的意外令牌u”。 我检查了集成请求中API网关上的使用Lambda代理,这会有所影响吗?
这是我的lambda函数
'use strict';
const uuid = require('uuid');
const AWS = require('aws-sdk'); // eslint-disable-line import/no-extraneous-dependencies
const dynamoDb = new AWS.DynamoDB.DocumentClient();
module.exports.create = (event, context, callback) => {
const timestamp = new Date().getTime();
const data = JSON.parse(event.body);
if (typeof data.phoneNumber !== 'string') {
console.error('Validation Failed');
callback(null, {
statusCode: 400,
headers: { 'Content-Type': 'text/plain' },
body: 'Couldn\'t create item.',
});
return;
}
const params = {
TableName: process.env.DYNAMODB_TABLE,
Item: {
id: uuid.v1(),
phoneNumber: data.phoneNumber,
sub: data.sub,
createdAt: timestamp,
updatedAt: timestamp,
},
};
console.log(params);
// write the lakeSubscription to the database
dynamoDb.put(params, (error) => {
// handle potential errors
if (error) {
console.error(error);
callback(null, {
statusCode: error.statusCode || 501,
headers: { 'Content-Type': 'text/plain' },
body: 'Couldn\'t create in dynamoDb.',
});
return;
}
// create a response
const response = {
statusCode: 200,
body: JSON.stringify(params.Item),
};
callback(null, response);
});
};
答案 0 :(得分:1)
首先,如果您看到提供的JSON:
{ "phoneNumber": "+11231231234", "sub": [ { "Name": "Tillery" }, { "Name": "Bob" } ] }
没有 body 键。您可以只使用 event 而不是 event.body 。喜欢
console.log(event);
AWS测试事件的输入已经是JSON Object,您无需再次解析它。
请删除JSON.parse,一切都会好起来的。
谢谢!