【问题标题】:React node express app - Heroku CORS error反应节点快递应用程序 - Heroku CORS 错误
【发布时间】:2021-12-31 14:42:42
【问题描述】:

我在 Heroku 上设置了一个 express 项目,并在 vercel 上设置了一个反应前端。 当我从前端发出请求时,我收到以下错误:

CORS 政策已阻止从源“https://helpr-front.vercel.app”访问“https://helpr-dev.herokuapp.com/users/register”获取:响应预检请求未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。如果不透明的响应满足您的需求,请将请求的模式设置为“no-cors”以获取禁用 CORS 的资源。

我在 Express 应用上实现了 CORS:

const cors = require('cors')
app.use(cors())

我也尝试过给它传递一个类似的配置:

const whitelist = ['http://localhost:3000', 'https://helpr-front.vercel.app/']
const corsOptions = {
  origin: function (origin, callback) {
    if (!origin || whitelist.indexOf(origin) !== -1) callback(null, true)
    else callback(new Error('Not allowed by CORS'))
  },
  credentials: true,
}

app.use(cors(corsOptions))

react 应用中的请求如下所示:

const submitRegisterForm = async e => {
        e.preventDefault()

            const response = await fetch(`${serverUrl}/users/register`, {
                method: 'POST',
                mode: 'cors',
                headers: {
                    'Accept': 'application/json',
                    'Content-Type': 'application/json'
                },
                body: JSON.stringify({
                    name: name,
                    email: email,
                    password: password,
                    accountType: accountType
                })
            })

            const data = await response.json()
        
    }

我尝试删除 mode: 'cors' 部分,但没有任何区别。

谁能告诉我这里缺少什么?

前端应用托管在此处:https://helpr-front.vercel.app/ 后端应用托管在这里:https://helpr-dev.herokuapp.com/

前端完整代码可以在这里找到:https://github.com/coccagerman/helpr-front 后端完整代码可以在这里找到:https://github.com/coccagerman/helpr-back

谢谢!

【问题讨论】:

  • 您能确认您的应用程序运行正常吗?您可以通过查看日志或输入 heroku 控制台来完成此操作
  • 我在部署时没有收到任何错误。如何检查它是否正在运行?
  • 简单查看应用程序的日志,如果这对您没有帮助,您可能需要使用 bash 进入您的实例并手动运行应用程序(node app.js)以查看它是否运行正确
  • 这些是我找到的日志:justpaste.it/91vti 我也手动运行了它,它似乎工作正常。
  • 你试过简单的corsOptions = { origin: 'https://helpr-front.vercel.app' }吗?

标签: javascript node.js express heroku cors


【解决方案1】:

所以这主要是由于与 mongoDb atlas 的连接问题造成的。 首先,Heroku IP 地址没有被列入数据库网络连接的白名单。像这里提到的那样修复它:Connecting Heroku App to Atlas MongoDB Cloud service

然后我在使用的 mongo atlas 连接 URI 上出现错误。

最后,似乎有必要在我提出的每个请求上添加mode: 'cors', 配置。

在 express 上,不需要 cors 配置。我只用app.use(cors())

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。
猜你喜欢
  • 2021-10-30
  • 1970-01-01
  • 1970-01-01
  • 2022-11-12
  • 1970-01-01
  • 2020-07-16
  • 2019-01-12
  • 2015-06-17
  • 2020-03-13
相关资源
最近更新 更多