Express. js Обслуживание Stati c Файлы на Dynami c Маршрут - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть следующее приложение. js code;

app.use(express.static(__dirname + "/public"));
app.use("/example", express.static(__dirname + "/public"));

app.engine("html", require("ejs").renderFile);

app.get("/", (req, res) => res.render("index.ejs"));
app.get("/example", (req, res) => res.render("example.ejs"));

app.get("/example/:id", (req, res) =>
  res.render("exampleView.ejs", {
    id: req.params.id,
  })
);

и в моем файле exampleView.e js, если я использую следующий тег изображения, он работает

<img src="/SampleImage.jpg">

Однако, если я использую его без /, он не будет работать. Использование этого не вариант, потому что это нарушает другие включенные файлы представления.

Я подозреваю, что вторая строка - это проблема, поэтому я попробовал следующие альтернативы,

app.get("/example", (req, res) => res.render("example.ejs"));
app.get("/example/*", (req, res) => res.render("/example.ejs"));
app.get("/example", (req, res) => res.render("/*/example.ejs"));

, но все еще не годится.

1 Ответ

0 голосов
/ 23 апреля 2020
<img src="SampleImage.jpg">

Попытается найти изображение в текущем маршруте, который в вашем случае '/example/SampleImage.jpg', тогда как изображение находится внутри '/SampleImage.jpg'.

app.get("/example/:id", ()=>{}) 

Заставит все файлы находиться внутри /example/.... Если вы хотите динамическое перенаправление c на этот путь, вы можете кодировать так:

app.use('*.jpg', (req, res, next) => {
    const subRoutes = req.path.split('/')
    const imageFileName = subRoutes[subRoutes.length - 1]
    res.redirect(`/${imageFileName}`)
})
app.use("/example", express.static(__dirname + "/public"))

Вы можете удалить эту строку

...