Как правильно указывать пути в express.static?
У меня есть front end собранный vue cli и back end на node js Express. Файловая структура: D:\programming\Web\project\frontEnd D:\programming\Web\project\BackEnd
То есть обе папки лежат в общей папке project. В папке frontEnd есть папка dist в которой лежит production index.html моего frontEnd. В папке BackEnd у меня находится index.js в котором инициализируется сервер. Я хочу чтобы на любой запрос выдавался один файл index.html, сервер выглядит следующим образом:
const express = require('express')
const path = require('path')
const cors = require('cors')
const app = express()
const PORT = process.env.PORT || 3000
app.use(cors())
app.use(express.static(path.resolve('../FrontEnd/dist')))
app.use((req, res, next) => {
res.sendFile(path.resolve('../FrontEnd/dist') + '/index.html')
})
app.listen(PORT, ()=> {
console.log(`Server is running on ${PORT} port`)
})
Меня очень смущает:
app.use(express.static(path.resolve('../FrontEnd/dist')))
app.use((req, res, next) => {
res.sendFile(path.resolve('../FrontEnd/dist') + '/index.html')
})
Тк я думаю в sendFile я должен указывать только имя файла тк путь я прописал в express.static, но если в sendFile передать '/index.html' сервер запуститься и даже выдаст мой файл, но при этом в консоль выводит:
Error: ENOENT: no such file or directory, stat 'D:\index.html'
Подскажите оставить все как есть или есть лучшие практики для этого случая?
Ответы (1 шт):
Видимо вы не совсем понимаете принцип работы express static. Static отправляет файлы из указанной директории браузеру для использования (картинки, скрипты). Почитайте здесь.
Вам в любом случае надо будет указывать полный путь до папки.
res.sendFile(path.join(__dirname + '<путь до папки>')).
(__dirname подставляет путь до папки со скриптом, в котором вызывается).