【发布时间】:2020-03-10 13:38:06
【问题描述】:
我正在慢慢地朝着使用或理解 AWS 的基本能力迈进。我设置了一个网关 API,以将字符串发布到(节点 10.x)Lambda 函数,然后将其发送到 Dynamo 表。我在尝试从网页 javascript 进行 API 调用时遇到了 CORS 问题,并发现它与 Lambda 函数的处理程序中的 CORS 有关。这是我现在拥有的:
const AWS = require('aws-sdk');
const db = new AWS.DynamoDB.DocumentClient({region: 'us-east-1'});
exports.handler = async function(event, context) {
var responseCode = 200;
var response = {
statusCode: responseCode,
headers: {
"Access-Control-Allow-Origin": "*"
},
body: JSON.stringify(event)
};
context.succeed(response);
console.log("Made it past context succeed");
var characterData = JSON.parse(event.body);
return await db.put(characterData).promise();
};
我从 AWS API 页面运行测试,只是将它的字符串发送到 Post 像
{
"TableName" : "characterTable",
"Item" : {
"userID" : "123",
"characterName" : "Alan",
"race" : "human"
}
}
当我注释掉
context.succeed(response);
我的函数将数据添加到 Dynamo 表中,但未在网关日志中显示 CORS 标头,这意味着未收到它们,如果我在网页上尝试,网页将错误地告诉我我正在缺少 Access-Control-Allow-Origin 标头。如果我保留该 sn-p,网关日志会显示正确的 CORS 标头,并且网页控制台会从 Access-Control-Allow-Origin 错误移至另一个错误(CORS 标头中缺少令牌“内容类型”,但那是将来对我来说是个问题)但数据不会传递到 Dynamo 表中,即使它上面的 console.log 语句正确触发。
我不确定这是如何发生的或为什么会发生,因此我希望能深入了解可能出现的问题!
编辑:这是我的网页 JS
//Default AWS sdk object
var lambda = new AWS.Lambda();
//api sdk stuff
var apigClient = apigClientFactory.newClient({
apiKey: 'iHadMyAPIKeyHere ' //placeholder for my actual API Key
});
function makeJSON(){
var userID = "";
var name = document.forms["characterForm"]["characterName"].value;
var race = document.forms["characterForm"]["race"].value;
var playerClass = document.forms["characterForm"]["class"].value;
var strength = document.forms["characterForm"]["strength"].value;
var dexterity = document.forms["characterForm"]["dexterity"].value;
var constitution = document.forms["characterForm"]["constitution"].value;
var intelligence = document.forms["characterForm"]["intelligence"].value;
var wisdom = document.forms["characterForm"]["wisdom"].value;
var charisma = document.forms["characterForm"]["charisma"].value;
characterSheetObj = {"userID": userID, "name": name, "race": race, "class": playerClass, "strength": strength, "dexterity": dexterity, "constitution": constitution, "intelligence": intelligence, "wisdom": wisdom, "charisma": charisma}
characterSheetJSON = JSON.stringify(characterSheetObj);
alert(characterSheetJSON);
var params = {
}
var body = {
"TableName" : "characterTable",
"Item" : {
"userID" : userID,
"name" : name,
"race" : race
}
}
var additionalParams = {
}
apigClient.myresourcePost(null, body);
}
【问题讨论】:
标签: amazon-web-services aws-lambda cors aws-api-gateway