У меня проблема с загрузкой ресурсов в нашей текущей настройке. Мы используем NGINX, Node 8.11, угловой 6
В скорлупе ореха мне пришлось выполнить некоторый анализ запроса, поступающего в наш узел server.js, чтобы правильно загрузить файлы для angular.
Вот настройка типичного приложения под названием heroes:
Nginx
location /heroes/ {
proxy_pass
http://unix:///myapps/tmp/node.sock;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
add_header X-UA-Compatible "IE=edge";
}
Узел Server.js
...
//==============================================================
// Point static path to dist
//=================================================================
app.use(express.static(__dirname + '/dist/'));
// set the static files location for the angular build
...
Node Server.js - создать список разрешенных расширений
...
// Allowed extensions list can be extended depending on your own needs
const allowedExt = [
'.js',
'.ico',
'.css',
'.png',
'.jpg',
'.woff2',
'.woff',
'.ttf',
'.svg',
'.map',
'.otf',
'.eot',
'.gif'
];
...
Node Server.js - файлы маршрутизации к угловому dist
...
// Redirect all the other requests
// TODO: This part is a hack.
//The main issue is express not serving up the static assets
app.get('*', (req, res) => {
if (allowedExt.filter(ext => req.url.indexOf(ext) > 0).length > 0) {
var iFileStart=req.url.lastIndexOf("/");
var sFile=req.url.substring(iFileStart+1);
res.sendFile(path.resolve('dist/'+sFile));
} else {
res.sendFile(path.resolve('dist/index.html'));
}
});
...
Угловой index.html
...
<base href="/heroes/">
...
С этой настройкой - мои приложения по большей части работают. Мне пришлось добавить еще несколько клуджей в него для некоторых других вопросов.
Проблема в том, что экспресс или моя установка nginx не правильно направила запрос ресурсов перед этим взломом. Я уверен, что мне не нужно проверять расширения файлов и маршрутизировать их по-другому.
Если я изменю файл Node Server.js на этот:
app.get('*', (req, res) => {
res.sendFile(path.resolve('dist/index.html'));
});
Тогда я получаю эту ошибку в браузерах:
Файлы JS обслуживаются как html?
Кажется, что файлы могут быть найдены, но не обрабатываются как файлы JS.
Есть предложения?