node.js - Heroku / Node / React - 如何在 heroku 上访问我的节点 API 端点
问题描述
编辑:如果有帮助,我可以共享我的任何一个 package.json 文件。
Edit2:我不知道这是一个常见问题还是一个愚蠢的问题。我知道它不适合 stackoverflow,但我已经在一天的大部分时间里一直在努力解决这个 heroku 部署问题。
我最近按照以下教程向 heroku 发布了一个 react / express 应用程序,虽然我认为我已经成功了,但我对如何访问我的 API 感到困惑。作为参考,本教程中的几个相关步骤是:
创建 Node / Express API,推送到 heroku,并检查它是否工作(通过转到 URL 中的 api 端点并逐字查看数据),然后将“start”:“node index.js”添加到 Node package.json文件。
在 Node API 的根目录下创建 React App ,在 react 应用的 package.json 中添加:“proxy”:“ http://localhost:5000 ”(我想这样 API 和应用可以通信。
我已经完成了所有这些步骤,并且我的 React 应用程序正在使用 heroku。该应用程序正在显示,并且由于该应用程序依赖 Node API 来获取要显示的数据,显然 Express/Node API 正在工作。
但是,我想通过在浏览器中访问端点来实际查看节点 API 端点,而我目前无法在 heroku 中执行此操作。所有的 React Routes 都可以工作,但是当我访问 api 路由时,我的屏幕是空白的。关于如何在浏览器中访问我在 heroku 上的 API 端点的任何想法?
例如我的问题:
本地主机节点
- 当我在 localhost 上启动 (node index.js) 时,我可以在http://localhost:8080/api/path/to/endpoint访问我的节点 API端点
- http://localhost:8080/是我的节点 API 的根目录
本地主机反应
- 当我在本地主机上启动(npm start)时,我可以在http://localhost:3000/访问我的反应应用程序根目录
- 我的另一个反应路由器路由是http://localhost:3000/myreactpage/,它指向我的反应应用程序的页面。
Heroku
- 假设我的 heroku 应用程序名称是https://dusty-manager-23562.herokuapp.com/
- https://dusty-manager-23562.herokuapp.com/指向我的 React 应用程序的根目录
- https://dusty-manager-23562.herokuapp.com/myreactpage 确实导致我的反应应用页面
- https://dusty-manager-23562.herokuapp.com/api/path/to/endpoint 没有显示我的数据,即使我认为它会/想要查看我的数据。这就是我的问题。
所以这是我的问题。一个简单问题的长篇文章 - 为什么当我的节点/快递应用程序推送到 heroku 时我不能访问它的 API 端点,当我可以在http://localhost:8080/api/path/看到数据时到/端点。反应应用程序正在运行,因此它可以正确获取 API 数据,但我希望能够在端点的浏览器中查看数据。
谢谢!
解决方案
因此,有两个问题可能会协同工作,让您感到头疼。
第一个也是更可能的问题是 react-router 正在拦截“/api” url,并过早地决定它没有任何组件可以显示。解决此问题的一种方法是编辑客户端代码中的“代理”属性package.json
。
"proxy": {
"/api": {
"target": "http://localhost:5000"
}
}
(☝️ 我在这里假设您保留了教程中的 5000 端口号。如果不将其更改为 8080 或您用于 api 端口号的任何值。)
第二个问题是为您添加的 service worker create-react-app 正在做同样的事情。它读取路径并认为没有什么可服务的。如果您的“/api”路由仍然显示空白页,请在浏览器的开发工具中转到“应用程序”选项卡并单击“清除站点数据”(假设您使用的是 Chrome,不确定如何在其他浏览器中完成此操作) 然后刷新。
如果您不关心服务工作者,registerServiceWorker()
请从客户端代码的 index.js 中删除调用。如果您确实需要服务工作者,则需要编辑 registerServiceWorker.js 文件,以便更清楚地了解它如何匹配路径。
希望有帮助!
推荐阅读
- php - 为什么 blockquote 标签在 PHP 循环中不起作用?
- javascript - 比较相同 Async/Await 函数的两种构造
- twilio-api - 通过 JWT 使用 QR 字符串生成的 QR 码无效
- django - 没有任何内容写入 Nginx access.log/error.log - 如何进行故障排除?
- java - 如何修复 CountDownTimer 在 android 应用程序中的错误
- r - 有没有办法根据文本进行过滤?
- javascript - 如果基于特定字段不存在,MongoDB 将项目添加到文档数组
- java - 从国际象棋中搜索国王的每一个方向
- terraform - 如何修复 Terraform 中的 badRequest 错误 400?
- linux - 从没有文件句柄的内存映射文件中清除操作系统缓存