【发布时间】:2019-08-07 03:47:16
【问题描述】:
我有一个我想在 Heroku 上托管的 MERN 应用程序。现在,应用程序已部署到 Raspberry Pi,那里一切正常,但是一旦它到达 Heroku,我所有的 API GET 请求都会导致 404 错误。我可以得到 React 前端,但没有其他工作。 Mongo 部分托管在 Atlas 的沙盒层上,并被列入白名单以接受任何授权连接。
我尝试过的事情:
- Not routing /api calls to static React files via server.js
- 更新所有对端口号的引用以使用
process.env.PORT || 3001 - 将我的 React 客户端 package.json 中的代理从
localhost交换为127.0.0.1 - 使用以下配置重新配置我对 API 的 axios 调用:
const axiosConfig = {
proxy:{
host: '127.0.0.1',
port: process.env.PORT || 3001
}
};
我的 API 中的 GET 请求导致 Heroku 上的 404 错误消息如下:xhr.js:173 GET https://builders-kit-0031.herokuapp.com/api/humidity 404 (Not Found)。
我正在使用密钥文件向 Atlas 进行身份验证:
if(process.env.NODE_ENV === 'production'){
module.exports = require('./keys_prod');
} else {
module.exports = require('./keys_dev');
}
该文件拉入以下文件,该文件使用我在 Heroku 的 config vars 部分中设置的 MONGO_URI 和 SECRET_OR_KEY 字符串。
module.exports = {
mongoURI: process.env.MONGO_URI,
secretOrKey: process.env.SECRET_OR_KEY
};
我的代码设置为通过 Express 服务器为 React 提供服务(所有 react 内容都在 /client 文件夹中)。我目前正在使用 Heroku postbuild 脚本进行部署,如下所示:"heroku-postbuild": "NPM_CONFIG_PRODUCTION=true NODE_ENV=production npm install --prefix client && npm run build --prefix client"。
我认为这是我今天早上在这里研究后发现的所有大热点。任何和所有关于尝试的事情的建议将不胜感激。您可以查看我正在尝试部署的内容的损坏版本here。很高兴发布任何其他 sn-ps 代码,如果这有助于调试 - 不想发布整个应用程序。提前致谢!
【问题讨论】:
-
寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及必要的最短代码 重现它在问题本身。没有清晰的问题陈述的问题对其他读者没有用处。见:How to create a Minimal, Complete, and Verifiable example.
-
欢迎。我们无法在此处调试您的完整应用程序和/或部署。在发布之前,通常希望您已采取“基本步骤”重现最少列表的问题。这些是上面发布的标准消息的基本要点。制作一个小程序和部署并不断添加内容,直到您在应用程序中看到与现在相同的问题。然后你就知道要问/“寻找”什么了。
-
嘿@NeilLunn - 抱歉,我认为我的描述在这里已经足够清楚了。我遇到的确切问题是,当部署到 Heroku 时,对我的 API 的所有 GET 请求都失败了,但是当从本地运行时,它们都可以与 Atlas 托管的数据库一起使用。我有一个类似的准系统应用程序,它只是针对部署在 heroku 上的 Atlas 上的 Mongodb 集群对用户进行身份验证,它遇到了同样的问题。我在网上找到的大部分信息都是为 mLab 而不是 Atlas 量身定制的——我想知道是否有一个我在进行这种转换时缺少的步骤。
标签: node.js reactjs mongodb heroku mongodb-atlas