Активы не маршрутизируются должным образом с NGNIX, Node 8.11 и Angular 6 - PullRequest
0 голосов
/ 07 сентября 2018

У меня проблема с загрузкой ресурсов в нашей текущей настройке. Мы используем 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.

Есть предложения?

1 Ответ

0 голосов
/ 08 сентября 2018

Хорошо, я выяснил свою проблему.

Пришлось редактировать следующее:

NGINX:

location /heroes/ {
    root /app/mydir/heroes/dist <--- added this
    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 - false will cause a 404 if not found
//========================================================================
app.use(function (req, res, next) {
    next();
  }, express.static(__dirname+'/dist',{fallthrough:true})); 
...

....
app.get('*', (req, res) => {
      res.sendFile(path.resolve('dist/heores/index.html'));

  });
...

angular.json

 "outputPath": "dist/heroes",

Теперь все работает. Надеюсь, другие найдут это полезным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...