node.js - 如何从反应客户端向运行在 Heroku 平台上的表达服务器发出 API 请求
问题描述
我一直在尝试使用 react、redux、node media server 和 json server 模块将类似 Twitch 的应用程序部署到 Heroku。但是,在生产期间尝试通过 api 请求连接我的反应客户端和快速服务器时,我一直遇到问题。
我试图通过我的动作创建者并使用带有http://localhost:4000基本 URL 的 axios 来发出实际请求,但这仅适用于我的本地计算机。
const response = await streams.get("/streams");
dispatch({ type: FETCH_STREAMS, payload: response.data });
};
你可以在https://github.com/XorinNebulas/Streamy查看我的完整仓库
您还可以在 https://streamy-app.herokuapp.com/上查看我在 Heroku 上当前部署的站点版本
这是我的 api/server.js 文件。我的快速服务器将在等于 process.env.PORT 的随机端口上进行监视,因此我无法知道如何在生产期间通过我的动作创建者向该随机端口发出网络请求。
const path = require("path");
const cors = require("cors");
const jsonServer = require("json-server");
const server = jsonServer.create();
const router = jsonServer.router("db.json");
const middlewares = jsonServer.defaults({
static: "../client/build"
});
const PORT = process.env.PORT || 4000;
// Set default middlewares (logger, static, cors and no-cache)
server.use(cors());
server.use(middlewares);
if (process.env.NODE_ENV === "production") {
// Add custom routes before JSON Server router
server.get("*", (req, res) => {
res.sendFile(
path.resolve(__dirname, "../", "client", "build", "index.html")
);
});
}
// Use default router
server.use(router);
server.listen(PORT, () => {
console.log(`JSON Server is listening on port ${PORT}`);
});
我希望请求能够通过并从 api/db.json 加载一些数据,resquest url 为https://streamy-app.herokuapp.com/streams但我得到的请求 url 为http://localhost :4000/streams,这当然会导致下面的 CORS 问题
跨域请求被阻止:同源策略不允许在http://localhost:4000/streams读取远程资源。(原因:CORS 请求未成功)。
我真的很感激任何建议,我已经为此工作了几天。
解决方案
推荐阅读
- jquery - jQuery 点击功能在移动浏览器中不起作用
- r - 从R中的频率表制作折线图
- jms - Nifi:如何在 PublishJMS 中将消息格式从 MQHRF2 更改为 MQSTR?
- php - PHP 生成的 SQL 复选框 - 基于选中的选择/插入和删除
- oracle - Oracle Apex - 我应该使用 Empty_BLOB() 还是 null?
- c# - NetCore 项目直接在项目根级别下显示来自 nuget 包的托管 dll
- serenity-bdd - 宁静与黄瓜重试功能
- css - Bootstrap 导航栏没有响应(立即折叠)
- python - AWS Lambda (Python) 无法在 S3 中解压缩和存储文件
- mpdf - 双面文件