Поскольку ваши ресурсы находятся в папке dist / application, используйте app.use(express.static(path.join(__dirname, 'dist/application')));
Для соответствия всем маршрутам веб-приложений, используйте app.get('*', function(req, res) {
res.sendFile(path.join(__dirname, 'dist/application/index.html'));
})
.
Это общий маршрут, и он будет вызван в действие, только если express не может найти другие маршруты и всегда обслуживает index.html. Например, любой действительный маршрут /api
никогда не достигнет этого обработчика, поскольку существует определенный маршрут, который его обрабатывает.
Окончательный код для server.js
const express = require('express');
const bodyParser = require('body-parser');
const path = require('path');
const api = require('./routes/api');
const PORT = 3000;
const app = express();
app.use(express.static(path.join(__dirname, 'dist/application')));
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use('/api', api);
app.get('*', function(req, res) {
res.sendFile(path.join(__dirname, 'dist/application/index.html'));
})
app.listen(PORT, function() {
console.log('Server listening on PORT '+PORT);
});
Несколько замечаний: нет.
Чтобы обслуживать статические файлы, вам не нужно устанавливать какие-либо заголовки вручную. Express ищет файлы в папке (папка dist
в вашем случае), которую вы установили как статический каталог с помощью функции промежуточного программного обеспечения express.static
. Express также устанавливает заголовки ответа на основе расширения файла.
Так что вам больше не нужно express.static.mime.define
в вашем коде.
В вашем случае вы определили app.use(express.static(path.join(__dirname, 'dist')));
, который прослушиваетстатические файлы в папке dist
. В этой команде app.use
вы не использовали путь монтирования, что означает, что все запросы будут проходить через статическое промежуточное ПО. Если промежуточное ПО находит ресурс с тем же именем, путем и расширением в папке dist, оно возвращает файл, в противном случае запрос передается другим обработчикам маршрутов.
Кроме того, если вы используете статическое промежуточное ПО, еслитак как в папке dist есть index.html (непосредственный дочерний элемент папки dist), ваш обработчик маршрута для «/» никогда не будет вызван, так как ответ будет обслуживаться промежуточным ПО.
Если вы этого не сделаетеу вас есть индексный html-файл в папке dist (непосредственный дочерний элемент dist), но он присутствует где-то в подпапках dist, и все же вам нужно получить к нему доступ, используя корневой путь "/", только тогда вам понадобится обработчик маршрута для пути "/"как показано ниже.
app.get("/", function(req, res) {
res.sendFile(path.join(__dirname, "dist/application/index.html"));
});
Файлы JS, указанные с использованием "./"
в dist/application/index.html
, относятся к самой папке dist и папке NOT dist/application
.
Youможете ссылаться на этот REPL для обновленного кода ?. https://repl.it/repls/SoreFearlessNagware
Попробуйте указать ниже URL-адреса
/api/myarticles
- Предоставлено обработчиком маршрута "/ api"
/api/myarticles.js
- Предоставлено промежуточным ПО статического ресурса, поскольку файл существует впапка dist / api
/
- отображается с использованием обработчика маршрута "/" и res.sendFile, поскольку index.html не существует в папке dist.
/test.js
- отображается с использованием статическогопромежуточное ПО, поскольку файл существует в папке dist
Дополнительные ссылки для справки.
https://expressjs.com/en/api.html#res.sendFile
https://expressjs.com/en/starter/static-files.html