Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.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
Node.js Heroku仅显示MERN应用程序的后端。我怎样才能解决这个问题?_Node.js_Reactjs_Express_Heroku_Parceljs - Fatal编程技术网

Node.js Heroku仅显示MERN应用程序的后端。我怎样才能解决这个问题?

Node.js Heroku仅显示MERN应用程序的后端。我怎样才能解决这个问题?,node.js,reactjs,express,heroku,parceljs,Node.js,Reactjs,Express,Heroku,Parceljs,我已经完成了我的第一个MERN应用程序。它在本地工作,并且在Heroku上“成功构建”,但显示的只是从MongoDB为“/”路由检索的后端数据 我在这里查看了一些讨论将MERN stack应用程序部署到Heroku的参考资料: 1. 2. 我曾尝试将这些帖子与我的代码集成在一起,但没有效果。我不确定如何将path中间件与我现有的三条路由(“/”、“/authors”和“/books”)结合使用,以及最终如何生成index.html。我不确定这是否有什么不同,但我正在使用parceljs构建前端

我已经完成了我的第一个MERN应用程序。它在本地工作,并且在Heroku上“成功构建”,但显示的只是从MongoDB为“/”路由检索的后端数据

我在这里查看了一些讨论将MERN stack应用程序部署到Heroku的参考资料: 1. 2.

我曾尝试将这些帖子与我的代码集成在一起,但没有效果。我不确定如何将path中间件与我现有的三条路由(“/”、“/authors”和“/books”)结合使用,以及最终如何生成index.html。我不确定这是否有什么不同,但我正在使用parceljs构建前端

下面是我的server.js文件:

if (process.env.NODE_ENV !== "production") {
  require("dotenv").config();
}

const express = require("express");
const app = express();
const cors = require("cors");
const path = require("path");

// Middleware
app.use(express.urlencoded({ limit: "10mb", extended: true }));
app.use(express.json({ limit: "10mb" }));
app.use(cors());

// Connect to Mongoose
const mongoose = require("mongoose");
mongoose.connect(process.env.MONGO_URI, {
  useNewUrlParser: true,
  useCreateIndex: true,
  useUnifiedTopology: true
});

const db = mongoose.connection;
db.on("error", err => console.error(err));
db.once("open", () => console.log("Connected to Mongoose"));

// Define routes
const indexRouter = require("./routes/index");
const authorRouter = require("./routes/authors");
const bookRouter = require("./routes/books");

// Utilize routes
app.use("/", indexRouter);
app.use("/authors", authorRouter);
app.use("/books", bookRouter);

app.listen(process.env.PORT || 3000);

如果你的应用程序在生产环境中,你能试试这段代码吗?express将提供静态资源,如果用户访问的是api路由以外的路由,它会将用户重定向到index.html(通过提供app.get('*',…)

server.js

。。。
应用程序使用(“/books”,bookRouter);
if(process.env.NODE_env===‘生产’){
app.use(express.static(path.join(uu dirname,'/client/dist'))
应用程序获取(“*”,(请求,请求)=>{
res.sendFile(path.join(uuu dirname,'/client/dist',index.html'))
})
}

您在哪里创建公用分发文件夹?如果您使用create react应用程序,当您运行npm run build时,它将创建一个名为dist的文件夹,您应该能够使用express应用程序在我的“客户端”文件夹中为其提供服务。我有一个“dist”文件夹。下面是项目总体布局的屏幕截图:既然如此,根据我从您的回复和我之前阅读的帖子中了解的情况,以下内容是否足以包含在我的server.js文件中<代码>app.get('*',(req,res)=>{res.sendFile(path.join(uu dirname,'/client/dist',index.html');})我已经将代码添加到server.js并重新部署到Heroku,但我的应用程序仍然只显示后端。所以,它不起作用。感谢您尝试在代码方面帮助我,并解释了为页面提供服务的方式。您能否尝试删除if语句以确保代码在每个环境中运行?我已删除if语句。我已经尝试(单独)为应用程序使用相对路径。使用(express.static)行。我还尝试了res.sendFile行的˚˚(uu dirname++'/client/dist/'+'index.html')的˚˚˚(也在另一个场合)