javascript - 来自 gatsby 站点中本地主机的亚马逊 lambda 函数的跨源
问题描述
我有以下代码,当我使用 netlify dev 将它作为本地无服务器函数运行时,它可以工作,但我需要它从开发服务器跨源运行到托管服务器函数。我将该函数放在 aws lambda 函数中,但在我的 https:dev.website.com 上出现跨源阻止错误,我认为返回对象中有正确的标头,所以不知道为什么会出现跨源错误.
任何帮助都会很棒
const sanityClient = require("@sanity/client");
const client = sanityClient({
projectId: "random-id",
dataset: "production",
useCdn: true,
});
exports.lambdaHandler = async (event, context) => {
var body = JSON.parse(event.body);
//console.log(body.price_id)
try {
const checkPriceId = async (test) => {
const query = `*[_type == "products" && price_id == "${body.price_id}"]`;
const documents = await client.fetch(query, {}); // this could throw
return documents.map((document) => document.sold);
};
var ok = checkPriceId().then((test) => {
return new Promise(function (resolve, reject) {
//console.log(test) // this will log the return value from line 7
console.log(test);
resolve(test);
});
});
var bools = await ok;
// prettier-ignore
return {
statusCode: 200,
headers: {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Headers': 'Content-Type',
'Access-Control-Allow-Methods':'GET, POST, OPTION',
},
body: JSON.stringify({
sold: bools,
}),
};
} catch (err) {
return { statusCode: 500, body: err.toString() };
}
};
如果有帮助,这是我对该功能的要求
var fetchUrl = https://random.executue-api.aws.com/prod/sold //not exact
var fetchData = async function () {
const response = await fetch(fetchUrl, {
method: "post",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
price_id: final,
}),
})
.then(res => {
return res.json()
})
.catch(error => console.log(error))
return response
}
更新:
我尝试按照下面答案中建议的方式添加 cors,但在下面看到它失败了,所以我尝试手动添加之后看到的方法响应。
我仍然收到跨域错误。我已经更改了域,所以它现在也是 https 了。真的卡在这里了。
我对此进行了更多研究,似乎在实际发布之前,它对选项方法进行了 cors 检查,因此我添加了相同的访问控制标头,并进行了部署,但没有成功。不太明白这个。
解决方案
检查您的集成响应中的值/尝试为 OPTIONS和POST手动设置它们(如果可行,请确保您从 lambda 正确传递响应)。
您的 POST 操作应该只需要 Access-Control-Allow-Origin 标头。另外两个(Access-Control-Allow-Methods、Access-Control-Allow-Headers)属于 OPTION 动作。请参阅此文章,并注意预检请求的完整示例交换(灰色):https ://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#preflighted_requests
推荐阅读
- javascript - API 返回错误,API 路径错误
- r - 根据数字顺序添加行
- oracle - 在 oracle 中找不到数据
- reactjs - 来自 redux-toolkit 的 createAsyncThunk 中的错误响应类型错误
- python - mark_area 重置 Y 轴域 (Altair)
- git - 如何将当前文件夹 git 推送为新提交,而不拉取旧文件
- python - 验证文件是否存在于远程机器上
- python - 如何随机选择整数区间/范围
- python - 如何从多个列表中随机选择一个列表python
- javascript - 我需要从“1609891200000”开始的正确时间而不使用 Moment