Msgstr "Ошибка типа: путь должен быть абсолютным". Серверный скрипт не находится в том же каталоге, что и внешний интерфейс. - PullRequest
0 голосов
/ 10 апреля 2020

Я работаю над приложением среднего стека и пытаюсь запустить его на Heroku.

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

Как вы можете видеть, мой бэкэнд находится в бэкэнд-папке, а мой интерфейс - в папке mapreacdt.

Вот что находится внутри сервера. 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();


// 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:"));

if (process.env.NODE_ENV === "production") {
  app.use(express.static("../mapreacdt/build"));
}

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(logger("dev"));

app.get("*", (request, response) => {
  response.sendFile(path.join("../mapreacdt", "build", "index.html"));
});

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


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

// launch our backend into a port
app.listen(API_PORT, () => console.log(`LISTENING ON PORT ${API_PORT}`));

Вот журналы Heroku

Я вижу, что что-то не так с моим app.get и моим app.use. Я искал решения, но все они использовали __dirname в path.join и app.use. И это имеет смысл, потому что в этих примерах их сервер. js находился в том же каталоге, что и индекс. html. Мой сервер. js находится вне текущего каталога, поэтому я сделал "../". Какой правильный абсолютный путь к mapreacdt / build / index. html?

1 Ответ

0 голосов
/ 10 апреля 2020

Вы по-прежнему сможете использовать __dirname в path.join. В вашем примере:

path.join(__dirname, "../mapreacdt", "build", "index.html")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...