Серверные файлы React в Express и Node на Heroku - PullRequest
0 голосов
/ 05 мая 2020

Я знаю, что есть куча руководств и сообщений о стеке MERN, но я не могу правильно развернуть фронтенд. Бэкэнд правильно обрабатывает запросы API, поскольку он работает с почтальоном.

У меня есть express .stati c путь к папке client / build. Неправильный ли путь к папке сборки реакции или есть что-то еще, что я должен изучить?

структура папок

Вот мой сервер. js

const mongoose = require("mongoose");
const express = require("express");
var cors = require("cors");
const bodyParser = require("body-parser");
const logger = require("morgan");
const Data = require("./data");
const path = require("path");

require("dotenv").config();

const API_PORT = process.env.PORT || 3001;

const app = express();
app.use(cors());
const router = express.Router();

// this is our MongoDB database
// connects our back end code with the database
mongoose.connect(process.env.MONGODB_URI, { useNewUrlParser: true });

let db = mongoose.connection;

db.once("open", () => console.log("connected to the database"));

// checks if connection with the database is successful
db.on("error", console.error.bind(console, "MongoDB connection error:"));

// (optional) only made for logging and
// bodyParser, parses the request body to be a readable json format
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(logger("dev"));

router.get("/", (req, res) => {
  res.send("hello world");
});


// append /api for our http requests
app.use("/api", router);

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"));
  });
}
// launch our backend into a port
app.listen(API_PORT, () => console.log(`LISTENING ON PORT ${API_PORT}`));

1 Ответ

0 голосов
/ 06 мая 2020

Вы уже определили папку файлов stati c в промежуточном программном обеспечении express:

app.use(express.static(path.join(__dirname, "client", "build")));

Поэтому попробуйте изменить метод res.sendFile(), чтобы он выглядел следующим образом:

res.sendFile(path.join(__dirname + '/index.html'));
...