Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 部署React+;NodeJS+;Express+;MySQL应用程序到Heroku仅部署服务器,不部署服务器_Javascript_Node.js_Reactjs_Express_Heroku - Fatal编程技术网

Javascript 部署React+;NodeJS+;Express+;MySQL应用程序到Heroku仅部署服务器,不部署服务器

Javascript 部署React+;NodeJS+;Express+;MySQL应用程序到Heroku仅部署服务器,不部署服务器,javascript,node.js,reactjs,express,heroku,Javascript,Node.js,Reactjs,Express,Heroku,正如标题所述,我有一个React+NodeJS+Express+MySQL,我们正试图将其部署到Heroku网页。我将它设置为每当有东西被推送到GitHub的主分支时自动部署 我们遇到的问题是,它正在为服务器部署路由并显示所有正确的信息,但react应用程序根本不显示。如何使服务器路由不显示,而react前端显示 附件是Server.js的代码以及我正在运行以构建客户端的脚本 const express = require('express') const cors = require('cor

正如标题所述,我有一个React+NodeJS+Express+MySQL,我们正试图将其部署到Heroku网页。我将它设置为每当有东西被推送到GitHub的主分支时自动部署

我们遇到的问题是,它正在为服务器部署路由并显示所有正确的信息,但react应用程序根本不显示。如何使服务器路由不显示,而react前端显示

附件是Server.js的代码以及我正在运行以构建客户端的脚本

const express = require('express')
const cors = require('cors')
const app = express()
const path = require('path');
const port = process.env.PORT || 8080;


const homeRoute = require("./routes/home");
const allReviews = require("./routes/getAllReviews");
const mostRecentReviews = require("./routes/mostRecentReview");
const postReview = require("./routes/postReview");
const editReview = require("./routes/editReview");
const updateReview = require("./routes/updateReview");
const deleteReview = require("./routes/deleteReview");
const filterReview = require("./routes/getFilterReview");
const recentReviews = require("./routes/mostRecentReview");

const locationAverageRating = require("./routes/locationAverageRating");
const allLocations = require('./routes/allLocations');

app.use(cors())

app.use('/', homeRoute);
app.use('/review', allReviews);
app.use('/locations', allLocations);
app.use('/review/recent', mostRecentReviews);
app.use('/review/post', postReview);

app.use('/review/edit', editReview);
app.use('/review/update', updateReview);
app.use('/review/delete', deleteReview);
app.use('/review/filter', filterReview);
app.use('/carrier/recent',recentReviews);

app.use('/carrier/edit', editReview);

app.use('/carrier/locations', locationAverageRating);

app.use(express.static('client/build'));
app.get('*', (req, res) =>{
    res.sendfile(path.resolve(__dirname + "./client/build/index.html"));
});

const port = process.env.PORT || 8080;
app.listen(port, () => {
    console.log(`Example app listening on port ${port}!`)
});
Heroku构建脚本:

  "heroku-postbuild": "NPM_CONFIG_PRODUCTION=false npm install --prefix client && npm run build --prefix client"

提前感谢您的帮助,如果您需要任何其他文件或有任何问题,请随时联系

使用
应用程序时。使用
顺序很重要。因为所有服务器路由都是在到react生成的路由之前声明的,所以服务器路由将优先

考虑在服务器路由前面加上一些前缀,使其与前端构建应该处理的请求不同(
/api
是一种常见的选择)

另一个选项是为前端指定路线(
/app
可能)。您可以将某些
GET
请求重定向到
homeRoute
中的此路由,这样,如果有人从根URL访问您的站点,他们就会到达正确的位置(假设您没有其他
GET
路由需要
homeRoute
处理)

因此,您可以将通配符
GET
路由更改为如下所示:

app.get('/app*', (req, res) => {
  res.sendfile(path.resolve(__dirname + "./client/build/index.html"));
})
然后进入“回家路线”

app.get('*', (req, res) => {
  res.redirect('/app')
})
...other homeRoutes

这是我在一年前做类似事情时多次提到的一篇博文,你可能也会发现它很有用:谢谢你,我会研究一下这个解决方案并回复你!