“ TypeError:路径必须是绝对的”。服务器脚本与前端不在同一个目录中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了“ TypeError:路径必须是绝对的”。服务器脚本与前端不在同一个目录中相关的知识,希望对你有一定的参考价值。

我正在开发一个普通堆栈应用程序,并试图在Heroku上启动它。

Here is the folder structure

您可以看到,我的后端在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`));

Here is the Heroku logs

我可以看到我的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:路径必须是绝对的”。服务器脚本与前端不在同一个目录中的主要内容,如果未能解决你的问题,请参考以下文章

HTTP服务器

代理服务器怎么设置 网络代理服务器设置方法介绍

服务器方面知识总结

WEB服务器应用程序服务器HTTP服务器区别

AJAX之服务器

高防秒解服务器|香港服务器|美国高防服务器