尝试将数据插入 dynamoDB 时无服务器 lambda 函数抛出错误 Table
Serverless lambda function throwing error when trying to insert data into dynamoDB Table
我正在尝试使用无服务器框架在 aws lambda 函数上测试 CRUD 功能。
这是我的命令 运行:
sudo serverless invoke local -f createArticle -p articles/event.json
当我尝试创建记录时出现错误。这是控制台中的错误:
Syntax Error -------------------------------------------
Unexpected token u in JSON at position 0
For debugging logs, run again after setting the "SLS_DEBUG=*" environment variable.
Get Support --------------------------------------------
Docs: docs.serverless.com
Bugs: github.com/serverless/serverless/issues
Forums: forum.serverless.com
Chat: gitter.im/serverless/serverless
Your Environment Information -----------------------------
OS: darwin
Node Version: 6.10.3
Serverless Version: 1.13.1
现在我已经检查了我的 javascript 并验证了我的 event.json 文件。
这是我的 javascript:
'use strict';
const AWS = require('aws-sdk');
const dynamo = new AWS.DynamoDB.DocumentClient();
const uuid = require('uuid');
module.exports.handler = (event, context, callback) => {
const data = JSON.parse(event.body);
if (data.text && typeof data.text !== 'string') {
console.log('Validation Failed');
callback(new Error('Body did not contain a text property.'));
return;
}
const params = {
TableName: 'BlogTable',
Item: {
article_id: "1",
text: data.text
}
};
const putCallback = (error, result) => {
if (error) {
console.log(error);
callback(new Error('Could not save record.'));
return;
}
//console.log(result);
const response = {
statusCode: 200,
body: JSON.stringify(result.Item)
};
callback(null, response);
}
dynamo.put(params, putCallback);
};
这是我的 event.json
文件:
{"text":"Hello World"}
为什么会抛出错误?以及如何设置我在 serverless.yml
文件中尝试过但没有得到任何输出的环境变量。
在我的 event.json 文件中,我必须像这样放置 json:
{"body": "{\"text\": \"Hello World\"}"
如果您使用 "Lambda proxy" 集成,则需要为直接调用您的 Lambda 函数的 http://
事件使用特定格式(例如,如果您从 CLI 使用 serverless invoke
,而不是 AWS API 网关管理控制台,您可以在其中使用 "Test" 按钮通过 API 调用 Lambda 函数。
使用 Lambda 代理,在此示例中,您需要使用 "body" 属性 创建一个 json 文件并将值字符串化,如下所示:
{
"body": "{\"text\":\"hello\"}"
}
原因是:"With the Lambda proxy integration, API Gateway maps the entire client request to the input event parameter of the back-end Lambda function"
http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-set-up-simple-proxy.html#api-gateway-simple-proxy-for-lambda-input-format
我正在尝试使用无服务器框架在 aws lambda 函数上测试 CRUD 功能。
这是我的命令 运行:
sudo serverless invoke local -f createArticle -p articles/event.json
当我尝试创建记录时出现错误。这是控制台中的错误:
Syntax Error -------------------------------------------
Unexpected token u in JSON at position 0
For debugging logs, run again after setting the "SLS_DEBUG=*" environment variable.
Get Support --------------------------------------------
Docs: docs.serverless.com
Bugs: github.com/serverless/serverless/issues
Forums: forum.serverless.com
Chat: gitter.im/serverless/serverless
Your Environment Information -----------------------------
OS: darwin
Node Version: 6.10.3
Serverless Version: 1.13.1
现在我已经检查了我的 javascript 并验证了我的 event.json 文件。
这是我的 javascript:
'use strict';
const AWS = require('aws-sdk');
const dynamo = new AWS.DynamoDB.DocumentClient();
const uuid = require('uuid');
module.exports.handler = (event, context, callback) => {
const data = JSON.parse(event.body);
if (data.text && typeof data.text !== 'string') {
console.log('Validation Failed');
callback(new Error('Body did not contain a text property.'));
return;
}
const params = {
TableName: 'BlogTable',
Item: {
article_id: "1",
text: data.text
}
};
const putCallback = (error, result) => {
if (error) {
console.log(error);
callback(new Error('Could not save record.'));
return;
}
//console.log(result);
const response = {
statusCode: 200,
body: JSON.stringify(result.Item)
};
callback(null, response);
}
dynamo.put(params, putCallback);
};
这是我的 event.json
文件:
{"text":"Hello World"}
为什么会抛出错误?以及如何设置我在 serverless.yml
文件中尝试过但没有得到任何输出的环境变量。
在我的 event.json 文件中,我必须像这样放置 json:
{"body": "{\"text\": \"Hello World\"}"
如果您使用 "Lambda proxy" 集成,则需要为直接调用您的 Lambda 函数的 http://
事件使用特定格式(例如,如果您从 CLI 使用 serverless invoke
,而不是 AWS API 网关管理控制台,您可以在其中使用 "Test" 按钮通过 API 调用 Lambda 函数。
使用 Lambda 代理,在此示例中,您需要使用 "body" 属性 创建一个 json 文件并将值字符串化,如下所示:
{
"body": "{\"text\":\"hello\"}"
}
原因是:"With the Lambda proxy integration, API Gateway maps the entire client request to the input event parameter of the back-end Lambda function" http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-set-up-simple-proxy.html#api-gateway-simple-proxy-for-lambda-input-format