SyntaxError: ожидаемое выражение, получило '<'

У меня возникла ошибка SyntaxError: expected expression, got '<' в консоли, когда я выполняю следующий node код

var express = require('express');
var app = express();
app.all('*', function (req, res) {
  res.sendFile(__dirname+'/index.html') /* <= Where my ng-view is located */
})
var server = app.listen(3000, function () {
  var host = server.address().address
  var port = server.address().port
})

Ошибка: enter image description here

Я использую Angular Js и его структуру папок, например, ниже.

enter image description here

Что мне здесь не хватает?

Ответ 1

Этот код:

app.all('*', function (req, res) {
  res.sendFile(__dirname+'/index.html') /* <= Where my ng-view is located */
})

сообщает Express, что независимо от того, что запрашивает браузер, ваш сервер должен вернуть index.html. Поэтому, когда браузер запрашивает файлы JavaScript, такие как jquery-x.y.z.main.js или angular.min.js, ваш сервер возвращает содержимое index.html, которое начинается с <!DOCTYPE html>, что вызывает ошибку JavaScript.

Ваш код внутри обратного вызова должен смотреть на запрос, чтобы определить, какой файл отправить назад, и/или вы должны использовать другой шаблон пути с помощью app.all. Подробнее см. В руководстве по маршрутизации.

Ответ 2

Попробуйте это, как правило, работает для меня:

app.set('appPath', 'public');
app.use(express.static(__dirname +'/public'));

app.route('/*')
  .get(function(req, res) {
    res.sendfile(app.get('appPath') + '/index.html');
  });

Если каталог public содержит мой index.html и ссылается на все мои файлы angular в папке bower_components.

Часть express.static, на мой взгляд, корректно обслуживает статические файлы (.js и css файлы, как указано вашим index.html). Судя по вашему коду, вам, скорее всего, понадобится использовать эту строку:

app.use(express.static(__dirname));

поскольку все ваши файлы JS, index.html и ваш файл JS-сервера находятся в одном каталоге.

Я думаю, что @T.J. Кроудер пытался сказать, что использовать app.route для отправки разных файлов, отличных от index.html, так как только с помощью index.html ваша программа просто ищет файлы .html и вызывает ошибку JS.

Надеюсь, что это сработает!

Ответ 3

У меня была такая же ошибка. И в моем случае

REASON. Существовал ограничение на эти ресурсы на сервере, а сервер отправлял страницу входа вместо страниц javascript.

РЕШЕНИЕ: предоставить пользователю доступ к ресурсам или вообще удалить ограничение.

Ответ 4

Основная идея заключается в том, что HTML-код был возвращен вместо Javascript.

Причина может быть:

  • неправильные пути
  • активы

Это может быть вызвано неправильной активацией прекомпиляции. В моем случае я поймал эту ошибку из-за неправильного кодирования.

Когда я открыл приложение application.js, я увидел application error Encoding::UndefinedConversionError at /assets/application.js

Была полная обратная ошибка ошибки, отформатированной как HTML вместо Javasript.

Убедитесь, что активы были успешно скомпилированы.

Ответ 5

Вы также можете получить это сообщение об ошибке, когда поместите встроенный тег в свой html, но оставьте его (обычным для меня), чтобы вы не добавили косую черту в тег закрытия script, как это:

<script>
  alert("I ran!");
<script> <!-- OOPS opened script tag again instead of closing it -->

интерпретатор JS пытается "выполнить" тег, который выглядит как выражение, начинающееся с знака меньше, поэтому ошибка: SyntaxError: expected expression, got '<'

Ответ 6

У меня была такая же ошибка, когда я перенес сайт Wordpress на другой сервер. URL-адрес заголовка для моих js-скриптов все еще указывал на старый сервер и имя домена.

Как только я обновил доменное имя, ошибка исчезла.

Ответ 7

У меня была аналогичная проблема, используя Angular js. Я переписал все index.html в моем .htaccess. Решение заключалось в том, чтобы добавить правильные дорожки. Каждая ситуация уникальна, но надеюсь, что это поможет кому-то.

Ответ 8

Эта проблема возникает, когда вы включаете файл с неправильным путем, и сервер дает ошибку 404 при загрузке файла.

Ответ 9

Я решил эту проблему с моим аутентифицированным приложением ASPNET, добавив WebResource.axd в качестве местоположения в web.config, чтобы он разрешил анонимным пользователям

<location path="WebResource.axd">
  <system.web>
    <authorization>
      <allow users="?"/>
    </authorization>
  </system.web>
</location>

Ответ 10

Просто добавьте:

app.use(express.static(__dirname +'/app'));

где '/app' - это каталог, в котором находится ваш index.html или ваш Webapp.

Ответ 11

У меня вопрос такого типа на Django, и моя проблема забудьте добавить static в тег <script>.

Как в моем шаблоне:

<script  type="text/javascript"  src="css/layer.js"></script>

Я должен добавить static к нему следующим образом:

<script type="text/javascript" src="{% static 'css/layer.js' %}" ></script>

Ответ 12

Это должно сработать для вас. Если вы используете SPA.

app.use('/', express.static(path.join(__dirname, 'your folder')));
// Send all other requests to the SPA
app.get('*', (req, res) => {
    res.sendFile(path.join(__dirname, 'your folder/index.html'));
});