Заблокирован из-за запрещенного типа MIME («text / html»): Angular 8, развернутый на tomcat 9.0.30, не может обслуживать ресурсы - PullRequest
4 голосов
/ 27 января 2020

У меня есть проект, в котором пользовательский интерфейс основан на angular 8, а бэкэнд - это сервис Springboot java. Весь проект представляет собой многомодульный проект с частью angular, представляющей собой отдельный модуль, в котором front-end builder используется для сборки кода angular в один исполняемый файл jar. Приложение работает нормально, когда используется встроенный кот. У меня есть новое требование, чтобы попытаться развернуть часть angular ui отдельно на внешнем коте. Но когда я копирую папку dist в папку webapps и пытаюсь ее обслужить, браузер блокирует запрос:

Loading module from “http://localhost:8080/polyfills-es2015.js” was blocked because of a disallowed MIME type (“text/html”).

browser screenshot

После выполнения По поиску в Google я понял, что проблема возникает из-за того, что angular 8 cli не удается добавить атрибут type в тег script в index.html. Когда я вручную добавляю тип, все работает нормально. Может кто-нибудь, пожалуйста, помогите мне понять, почему это происходит, а также возможное решение проблемы, отличной от ручного редактирования.

Сгенерировано index.html:

<!doctype html>
<html lang="en">

<head>
  <meta charset="utf-8">
  <title>My Application</title>
  <base href="/">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <i class="fas fa-chart-area"></i>
  <link rel="icon" type="image/x-icon" href="favicon.ico">
</head>

<body style="margin: 0;">
  <app-root></app-root>
<script src="runtime-es2015.js" type="module"></script><script src="runtime-es5.js" nomodule defer></script><script src="polyfills-es5.js" nomodule defer></script><script src="polyfills-es2015.js" type="module"></script><script src="styles-es2015.js" type="module"></script><script src="styles-es5.js" nomodule defer></script><script src="scripts.js" defer></script><script src="vendor-es2015.js" type="module"></script><script src="vendor-es5.js" nomodule defer></script><script src="main-es2015.js" type="module"></script><script src="main-es5.js" nomodule defer></script></body>

</html>

Итак, суммируя все это работает следующим образом:

  • Атрибут type больше не является обязательным в HTML5, поэтому angular cli больше не добавляет его в качестве атрибута. Во встроенном tomcat активы копировались в ROOT, что прекрасно работает, так как при развертывании во внешнем tomcat я держал ресурсы в папке в веб-приложениях, что означало, что мне нужно было изменить поле baseHref (либо во время сборки используя команду или после сборки вручную), чтобы отразить то же самое. Работает следующее:
  • Хранение ресурсов в папке ROOT в веб-приложениях (все отлично работает, потому что файлы js теперь находятся в root /).
  • Хранение файлов в например, в папке MyApp указывается значение baseHref в index.html.

Связано ссылка

Ответы [ 2 ]

3 голосов
/ 27 января 2020
 <base href="/">

- это проблема, измените ее на свой контекст root. Или измените его на

<base href=".">

Браузер не может найти ваш файл JS, потому что он ищет файл JS относительно base href.

Ваш базовый href = "/", поэтому он ищет все js файлы в "localhost: 8080 /", но ваши JS файлы могут присутствовать в "localhost: 8080 / some Root "

Еще одно решение, о котором вы можете подумать, это развертывание в папке ROOT tomcat без контекста root, если это разрешено для вашего проекта

1 голос
/ 27 января 2020

Сервер считает, что ваш файл JS является файлом HTML.

Это может быть вызвано ошибкой распознавания на стороне сервера или отсутствием файла JS (и сервером не отправляет код состояния 404?) или в нем нет js.

Из-за этого он отправляет тип контента text/html.

Браузер видит контент type думает, что это не css и не разрешает его.

Если указать тип (на стороне клиента) или изменить тип на стороне сервера, он должен работать.

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