无法准备我的 MERN 应用程序以进行部署
Not able to prepare my MERN app for deployment
我以前从未将 MERN 应用程序部署到生产环境中。这将是我的第一次尝试,我正计划将该应用程序部署到数字海洋。
因此,我已经按照 Udemy 课程中的说明准备了我的 MERN 应用程序以供部署。我的应用程序结构如下:
以下是我对我的应用程序所做的主要更改:
- 因为在生产环境中不会有 create-react-app 创建的服务器,我已经在 server/index.js 中编写了生产路由逻辑,它本质上说对于任何不受 [=38= 管理的路由]("/api/users", userRoutes) & app.use("/api/download", downloadRoutes),后端服务器将服务于 [ 中的 index.html 文件=36=] 文件夹,这是我通过 运行ning 命令创建的:npm 运行 build.
server/index.js
const express = require("express");
const path = require("path");
const dotenv = require("dotenv");
const colors = require("colors");
const connectDB = require("./config/db");
const {
notFound,
globalErrorHandler,
} = require("./middleware/errorMiddleware");
const userRoutes = require("./routes/userRoutes");
const downloadRoutes = require("./routes/downloadRoutes");
dotenv.config();
connectDB();
const app = express();
app.use(express.json());
app.use("/api/users", userRoutes);
app.use("/api/download", downloadRoutes);
// Routing logic in production
if (process.env.NODE_ENV === "production") {
app.use(express.static(path.join(__dirname, "/client/build")));
app.get("*", (req, res) => {
res.sendFile(path.resolve(__dirname, "client", "build", "index.html"));
});
}
app.use(notFound);
app.use(globalErrorHandler);
const PORT = process.env.PORT || 5000;
app.listen(PORT, () => {
console.log(`Server listening on port ${PORT}`.yellow.bold);
});
- 我已将 .env 文件中的 process.env.NODE_ENV 更改为生产环境。
经过上述更改后,当我 运行 "npm start"(仅启动后端服务器)(而不是同时启动前端和后端服务器的"npm 运行 dev" ) 并访问 http://localhost:5000,我应该会看到我的应用程序。相反,我看到了以下错误。
我做错了什么?
如您在错误消息中所见,Express 正在 server/client/build
中寻找不存在的 index.html
。修复路径。
app.use(express.static(path.join(__dirname, '../client/build')))
您需要将整个客户端文件夹移动到服务器中,然后在服务器的 index.js 文件中添加以下内容:
if (process.env.NODE_ENV === "production") {
app.use(express.static("front/build"));
const path = require('path')
app.get("*", (req, res) => {
res.sendFile(path.resolve(__dirname, 'front', 'build',
'index.html'))
})
}
确保先 运行 npm 运行 构建。
我以前从未将 MERN 应用程序部署到生产环境中。这将是我的第一次尝试,我正计划将该应用程序部署到数字海洋。
因此,我已经按照 Udemy 课程中的说明准备了我的 MERN 应用程序以供部署。我的应用程序结构如下:
- 因为在生产环境中不会有 create-react-app 创建的服务器,我已经在 server/index.js 中编写了生产路由逻辑,它本质上说对于任何不受 [=38= 管理的路由]("/api/users", userRoutes) & app.use("/api/download", downloadRoutes),后端服务器将服务于 [ 中的 index.html 文件=36=] 文件夹,这是我通过 运行ning 命令创建的:npm 运行 build.
server/index.js
const express = require("express");
const path = require("path");
const dotenv = require("dotenv");
const colors = require("colors");
const connectDB = require("./config/db");
const {
notFound,
globalErrorHandler,
} = require("./middleware/errorMiddleware");
const userRoutes = require("./routes/userRoutes");
const downloadRoutes = require("./routes/downloadRoutes");
dotenv.config();
connectDB();
const app = express();
app.use(express.json());
app.use("/api/users", userRoutes);
app.use("/api/download", downloadRoutes);
// Routing logic in production
if (process.env.NODE_ENV === "production") {
app.use(express.static(path.join(__dirname, "/client/build")));
app.get("*", (req, res) => {
res.sendFile(path.resolve(__dirname, "client", "build", "index.html"));
});
}
app.use(notFound);
app.use(globalErrorHandler);
const PORT = process.env.PORT || 5000;
app.listen(PORT, () => {
console.log(`Server listening on port ${PORT}`.yellow.bold);
});
- 我已将 .env 文件中的 process.env.NODE_ENV 更改为生产环境。
经过上述更改后,当我 运行 "npm start"(仅启动后端服务器)(而不是同时启动前端和后端服务器的"npm 运行 dev" ) 并访问 http://localhost:5000,我应该会看到我的应用程序。相反,我看到了以下错误。
如您在错误消息中所见,Express 正在 server/client/build
中寻找不存在的 index.html
。修复路径。
app.use(express.static(path.join(__dirname, '../client/build')))
您需要将整个客户端文件夹移动到服务器中,然后在服务器的 index.js 文件中添加以下内容:
if (process.env.NODE_ENV === "production") {
app.use(express.static("front/build"));
const path = require('path')
app.get("*", (req, res) => {
res.sendFile(path.resolve(__dirname, 'front', 'build',
'index.html'))
})
}
确保先 运行 npm 运行 构建。