语法错误:预期的表达式,得到“<”

IT技术 javascript angularjs node.js express
2021-01-14 11:31:45

SyntaxError: expected expression, got '<'当我执行以下节点的代码在控制台错误

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
})

错误 :在此处输入图片说明

我正在使用 Angular Js,它的文件夹结构如下所示

在此处输入图片说明

我在这里缺少什么?

6个回答

这段代码:

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

告诉 Express 无论浏览器请求什么,您的服务器都应该返回index.html. 因此,当浏览器请求jquery-x.y.z.main.js或 之类的 JavaScript 文件时angular.min.js,您的服务器将返回 以index.html开头的内容<!DOCTYPE html>,这会导致 JavaScript 错误。

您在回调中的代码应该查看请求以确定要发回哪个文件,和/或您应该使用不同的路径模式与app.all. 有关详细信息,请参阅路由指南

很好的解释。
2021-03-18 11:31:45
@underscore:对于服务器的“主页”(所以,可能是你的index.html),是的。然后,您将需要另一条路线来提供 .js 和其他文件(CSS、除 之外的页面/等)。同样,路由指南有详细信息。
2021-03-23 11:31:45
那么,获取 index.html 文件的理想方法是什么?
2021-04-01 11:31:45
@underscore:我刚刚添加了一个指向路由指南的链接,其中详细描述了如何注册路由。
2021-04-08 11:31:45

试试这个,通常对我有用:

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 并引用文件夹 bower_components 中的所有角度文件。

我认为 express.static 部分可以正确提供静态文件(index.html 引用的 .js 和 css 文件)。根据您的代码判断,您可能需要改用这一行:

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

因为看起来你所有的 JS 文件,index.html 和你的 JS 服务器文件都在同一个目录中。

我认为@TJ Crowder 想说的是使用 app.route 发送 index.html 以外的不同文件,因为仅使用 index.html 将使您的程序只查找 .html 文件并导致 JS 错误。

希望这有效!

主要思想是不知何故返回了 HTML 而不是 Javascript。

原因可能是:

  • 错误的路径
  • 资产本身

可能是资源预编译错误导致的。就我而言,由于编码错误,我发现了这个错误。

当我打开我的 application.js 时,我看到 application error Encoding::UndefinedConversionError at /assets/application.js

有完整的错误回溯,格式为 HTML 而不是 Javasript。

确保资产已成功预编译。

感谢您提供错误路径的提示!当我将例如 <script src="js/min/jquery.scrollTo-min.js" type="text/javascript"></script> 更改为 <script src="/js/min/ 时,错误消失了jquery.scrollTo-min.js" type="text/javascript"></script> :)
2021-03-24 11:31:45
@nerdess,不客气。我给出了这个答案,因为发现接受的答案对我没有帮助
2021-04-08 11:31:45

我有同样的错误。就我而言

原因服务器上的资源受到限制,服务器正在发送登录页面而不是 javascript 页面。

解决方案:允许用户访问资源或完全取消限制。

当您在 html 中放置内联标记时,您也可能会收到此错误消息,但会出现(对我来说很常见)错误,即您忘记将斜杠添加到结束脚本标记中,如下所示:

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

JS 解释器尝试“执行”标签,它看起来像一个以小于号开头的表达式,因此出现错误: SyntaxError: expected expression, got '<'

而且你也错过了开头标签中的 T
2021-04-07 11:31:45
固定的!谢谢 Sixtoo :-)
2021-04-11 11:31:45