首页 > 解决方案 > 如何让我的 Go Lambda 函数在浏览器中调用它时给我一个响应?

问题描述

我在 Go 中创建了一个微服务,它从请求正文中解组数据并将其存储在 DynamoDB 中。REST URL 几乎可以在任何地方运行,但似乎是浏览器。当我在浏览器中运行 fetch 时,我得到一个 403 没有响应。我可以使用 Node 脚本、curl 命令或什至使用 repl.it 之类的工具进行测试时得到 200 响应。但出于某种原因,它永远不想在 Web 应用程序或开发控制台(我使用的是 Chrome)中工作。我尝试在多个网站中运行该请求,包括我正在构建的用于运行它的 Web 应用程序,并且所有这些网站都给出了相同的 403 无响应结果。

在 API Gateway 中,授权设置为“无”,API 密钥设置为“不需要”,所以我很难看到如何在我的端点上获得 403。在前端,我的 fetch 请求如下所示。有效的 curl 命令也在下面。我在创建这个之前关注了这个帖子,虽然它很相似,但这个人确实得到了回应,而我的没有给我任何回应。它作为脚本工作,但在浏览器中不起作用。除了在浏览器内部,它如何在任何地方工作?如果我能得到一些关于正在发生的事情的信息,那就太棒了。如果我能得到一些关于如何解决这个问题的信息,那真是太棒了。

js

fetch(url, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    data: JSON.stringify({
        Email: 'example@test.com'
    }),
})
    .then(res => res.json())
    .then(json => console.log(json))
    .catch(e => console.error(e))

卷曲

curl -H 'application/json' -d '{ "Email": "example@test.com" }' $URL

更新:我发现我出了什么问题。这是一个 CORS 问题。我没有处理在我的 POST 请求之前作为预检请求发送的 OPTIONS 方法。OPTIONS 方法在浏览器中时会自动发送,但如果您在其他任何地方运行代码则不会。

标签: goaws-lambdaaws-api-gateway

解决方案


推荐阅读