#node.js #express #ejs
#node.js #экспресс #ejs
Вопрос:
Этот вопрос в основном связан с моей настройкой, поэтому, пожалуйста, потерпите, пока я пытаюсь это объяснить.
Моя структура папок выглядит следующим образом:
.
├── server/
│ └── index.ts // the file that starts my server
├── pages/
│ └── index.ts // Generates index page
└── views/
└── index.ejs // An ejs view
└── js/
└── index.js // A simple js file with a console log in it
Я запускаю экспресс-сервер, с server/index.ts
которого ищет файлы внутри pages
каталога.
import * as express from "express";
const app = express();
app
.set("view engine", "ejs")
.get("*", function handler(req, res) {
const _found = require(`${process.cwd()}/pages${req.url}`);
res.render(_found.default(), {});
})
.listen(3000, () => console.log("Started on http://localhost:3000"));
Мои файлы страниц довольно просты, они выглядят так:
function Index(): string {
return `index.ejs`;
}
export default Index;
Я использую эти файлы, чтобы указать своему серверу, какой шаблон ejs использовать для этой конкретной страницы. В приведенном выше случае я возвращаюсь index.ejs
, который сообщает моему серверу найти views/index.ejs
.
Это отлично работает, по крайней мере, до тех пор, пока я не попытаюсь включить какие-либо статические файлы в свои шаблоны ejs.
<html>
<body>
<script src="/js/index.js"></script>
<h1><%= pageName %></h1>
</body>
</html>
По какой-то причине, если я загружу этот шаблон ejs способом, описанным выше, сервер попытается выполнить поиск /js/index.js
внутри pages/js/index.js
, а не /js/index.js
.
Я пытался использовать относительный путь:
<script src="../js/index.js"></script>
Но это не сработало.
Я не могу поместить свои статические файлы в pages
каталог, так как это нарушит работу моего сервера.
Как я могу помешать express искать файлы в неправильной папке?
Ответ №1:
Express, по-видимому, может установить статическую папку, поэтому я сменил свой сервер на:
app
.set("view engine", "ejs")
.use("/public", express.static("public"))
.get("*", function handler(req, res) {
const _found = require(`${process.cwd()}/pages${req.url}`);
res.render(_found.default(), {});
})
.listen(3000, () => console.log("Started on http://localhost:3000"));
Затем я переместил свои статические файлы в public/js/index.js
и загрузил их <script src="/public/js/index.js"></script>
.
Это работает так, как должно!