【发布时间】:2022-01-08 00:34:29
【问题描述】:
我已经在 Heroku 上部署了我的 MERN 应用程序,一切都很好,直到我每次刷新页面或尝试从地址栏访问路由时都意识到问题。虽然通过 React Router 链接导航很好,但尝试从 URL 地址栏直接转到路由或刷新页面会导致应用程序中断并将服务器响应直接发送到浏览器而不是渲染组件 - 澄清:如果给定route 应该创建一个GET request 并显示一些数据,实际的JSON 显示在屏幕上。
据我检查,这仅发生在生成 GET request 的组件上。
server.js
// INITIATE APP
const app = express();
// MIDDLEWARE
app.use(express.json());
app.use(cookieParser());
app.use(cors());
app.use(passport.initialize());
const isProduction = process.env.NODE_ENV === "production";
// Priority serve any static files
isProduction &&
app.use(express.static(path.resolve(__dirname, "../client/build")));
// CONNECT TO DATABASE
// db config
const dbConnection = isProduction
? process.env.MONGO_URI_PROD
: process.env.MONGO_URI_DEV;
mongoose.connect(dbConnection, () => {
console.log("Successfully connected to database");
});
// ROUTES
const authRouter = require("./routes/auth");
const detailsRouter = require("./routes/details");
const diaryRouter = require("./routes/diary");
const resultsRouter = require("./routes/results");
const settingsRouter = require("./routes/settings");
app.use("/auth", authRouter);
app.use("/details", detailsRouter);
app.use("/diary", diaryRouter);
app.use("/results", resultsRouter);
app.use("/settings", settingsRouter);
// All remaining requests return the React app, so it can handle routing
isProduction &&
app.get("*", function (request, response) {
response.sendFile(path.resolve(__dirname, "../client/build", "index.html"));
});
// DEFINE PORTS
const port = process.env.PORT || 5000;
// START SERVER
app.listen(port, () => {
console.log(`Server started on port ${port}`);
});
在上面代码的末尾,就在Define ports 之前,我包含了这条语句,以解决其他路线上发生的类似问题。我认为这将在任何情况下防止此错误,但似乎情况并非如此。可以试试here的app(测试后可以删除/settings的账号)。
【问题讨论】:
标签: javascript node.js reactjs express