标题说明了一切。我在这里构建了一个最小的工作示例:https :
//github.com/sehailey/proxytest
我已经尝试过,这样可能会使我丢失的东西计数(尽管它们存储在提交中)。我保证一旦得到答案,就可以跟进数十个回答该问题的线程。
看起来他们改变了create-react-app
利用代理的方式。proxy
从中删除package.json
。然后…
添加此包:
npm i -S http-proxy-middleware
然后创建一个setupProxy.js
在src
:
src / setupProxy.js
const proxy = require("http-proxy-middleware");
module.exports = app => {
app.use(proxy("/api/*", { target: "http://localhost:5000/" }));
};
现在,从React组件内部,您可以执行以下操作:
src / App.js
import React, { Component } from "react";
import logo from "./logo.svg";
import "./App.css";
export default class App extends Component {
state = {
message: "",
error: "",
eee: "",
text: ""
};
componentDidMount = () => this.fetchAPIMessage();
fetchAPIMessage = async () => {
try {
const res = await fetch(`/api/message`);
const { message } = await res.json();
this.setState({ message });
} catch (err) {
console.error(err);
}
};
render = () => (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<p>WELCOME CREATE REACT APP!</p>
<div className="App-link">{this.state.message}</div>
</header>
</div>
);
}
index.js (我添加npm i -D morgan
了一个方便的日志记录框架,当请求命中API时,它将在控制台中显示它)。
const path = require("path");
const express = require("express");
const app = express();
const morgan = require("morgan");
app.use(morgan("tiny")); // logging framework
// Serve our api message
app.get("/api/message", async (req, res, next) => {
try {
res.status(201).json({ message: "HELLOOOOO FROM EXPRESS" });
} catch (err) {
next(err);
}
});
if (process.env.NODE_ENV === "production") {
// Express will serve up production assets
app.use(express.static("build"));
// Express will serve up the front-end index.html file if it doesn't recognize the route
app.get("*", (req, res) =>
res.sendFile(path.resolve("build", "index.html"))
);
}
// Choose the port and start the server
const PORT = process.env.PORT || 5000;
app.listen(PORT, () => console.log(`Mixing it up on port ${PORT}`));
package.json (用于node
提供生产资产-请参见“开始”脚本)
{
"name": "proxytest",
"version": "0.1.0",
"private": true,
"homepage": "https://proxytest2.herokuapp.com/",
"dependencies": {
"concurrently": "^4.0.1",
"express": "^4.16.4",
"http-proxy-middleware": "^0.19.0",
"react": "^16.5.2",
"react-dom": "^16.5.2",
"react-scripts": "2.0.5",
"serve": "^10.0.2"
},
"scripts": {
"start": "NODE_ENV=production node index.js",
"build": "react-scripts build",
"test": "react-scripts test",
"client": "react-scripts start",
"server": "nodemon server",
"eject": "react-scripts eject",
"dev": "concurrently --kill-others-on-fail \"npm run server\" \"npm run client\"",
"heroku-postbuild": "npm run build"
},
"eslintConfig": {
"extends": "react-app"
},
"browserslist": [
">0.2%",
"not dead",
"not ie <= 11",
"not op_mini all"
]
}
在以下位置运行时,您将在控制台中看到的内容production
:
m6d@m6d-pc:~/Desktop/proxytest-master$ npm start
> proxytest@0.1.0 start /home/m6d/Desktop/proxytest-master
> NODE_ENV=production node index.js
Mixing it up on port 5000
GET / 200 2057 - 6.339 ms
GET /static/css/main.068b9d02.chunk.css 304 - - 1.790 ms
GET /static/js/1.9a879072.chunk.js 304 - - 0.576 ms
GET /static/js/main.e3ba6603.chunk.js 304 - - 0.605 ms
GET /api/message 201 36 - 4.299 ms
GET /static/media/logo.5d5d9eef.svg 304 - - 0.358 ms
其他说明:
client
具有自己依赖项的文件夹中)。package.json
当wirite https://tictactoesko.herokuapp.com/在浏览器中时,我重新输入Follow错误消息: 以下是travis.yml语言:node_js node_js:-node addons:sonarcloud:before_script:-npm start----silent&script:-npm run lint-npm test-sonar-scanne
问题内容: 我有一个使用Expressjs的前端create-react-app和一个后端API。 我已将后端API成功部署到Google App Engine。 但是现在我需要将create-react-app部署到Google Cloud,这变得 非常令人困惑,我尝试了一段时间的google,目前尚无真正/推荐的 方法。 至少我看到其他人建议以两种方式这样做: =>我看到使用这种方式有一个缺点
问题内容: 我正在尝试在Google App Engine上部署使用create-react-app创建的应用程序。 我的应用程序在本地(和)都可以正常运行。但是,在Google App Engine上部署的应用程序仅显示index.html,并且不会调用我的react代码。 Chrome开发者控制台显示。 另外,我在console.cloud.google.com上发现,已部署的应用程序不包含构
create-react-app React Project with Node Express Backend Example on using create-react-app with a Node Express Backend Usage Install nodemon globally npm i nodemon -g Install server and client depende
npm启动 在默认浏览器上启动反应服务器,对我来说是Firefox。我喜欢Firefox用于浏览,但更喜欢其开发人员工具的Web开发Chrome。有没有办法强制"npm start"使用Chrome启动服务器,而不将我的默认浏览器更改为chrome?我在Windows上使用Bash。 编辑:我使用"create-react-app"来创建我的服务器,这为"npm start"添加了一个脚本到"pa
当部署到支持多容器的Azure Web应用时,我收到来自的“无效主机头”消息https://mysite.azurewebsites.com 这个很好。 我有两个Docker容器:React应用程序和承载我的API的Express应用程序。我正在使用代理在 图像已存储在Azure容器注册表中。它们似乎从日志中加载得很好。 在我的应用程序服务中 我还在应用程序设置中定义了: 为3000。 这导致我的