“ TypeError:路径必须是绝对的”。服务器脚本与前端不在同一个目录中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了“ TypeError:路径必须是绝对的”。服务器脚本与前端不在同一个目录中相关的知识,希望对你有一定的参考价值。
我正在开发一个普通堆栈应用程序,并试图在Heroku上启动它。
您可以看到,我的后端在backend文件夹中,而我的前端在mapreacdt文件夹中。
这是server.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`));
我可以看到我的app.get和app.use出了点问题。我已经搜索了解决方案,但它们都在path.join和app.use中都使用了__dirname。这是有道理的,因为在这些示例中,它们的server.js与index.html位于同一目录中。我的server.js在当前目录之外,这就是我执行“ ../”的原因。 mapreacdt / build / index.html的正确绝对路径是什么?
答案
您仍然应该可以使用__dirname
中的path.join
。在您的示例中:
path.join(__dirname, "../mapreacdt", "build", "index.html")
以上是关于“ TypeError:路径必须是绝对的”。服务器脚本与前端不在同一个目录中的主要内容,如果未能解决你的问题,请参考以下文章