javascript - Angular .min.js :1 Uncaught SyntaxError: Unexpected token <

标签 javascript jquery angularjs node.js

我正在使用 angular js 制作一个简单的项目。

我在 Chrome 控制台中收到以下错误消息。

Uncaught SyntaxError: Unexpected token <
bootstrap.min.js:1 Uncaught SyntaxError: Unexpected token <
jquery.min.js:1 Uncaught SyntaxError: Unexpected token <
app.js:1 Uncaught ReferenceError: angular is not defined
    at app.js:1

以下是我的ma​​in.html

<!Doctype html>
<html ng-app="ContactApp">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title></title>
        <meta name="description" content="">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>Contacts</title>
        <base href="/" />
        <link rel="stylesheet" href="src/bootstrap.min.css" />
    </head>
    <body>

        <div class="container">
            <div class="page-header">
                <h1>Contacts: {{message}}</h1>
            </div>
        </div>



     <script type="text/javascript"  src='bower_components/jquery/dist/jquery.min.js'></script>
     <script type="text/javascript"  src='bower_components/dist/js/bootstrap.min.js'></script>
     <script type="text/javascript"  src='bower_components/angular/angular.min.js'></script>
     <script src="src/app.js"></script>
    </body>
</html>

以下是我的server.js文件

const express = require("express");
var app =express();
app.use(express.static("./public"))
    .get("*",function(req,res){
        res.sendfile("public/main.html");
    })
    .listen(3000);

以下是我的app.js文件

var angularApp = angular.module("ContactApp",[]);
angularApp.run(function($rootScope){
    $rootScope.message ="Hellow From Angular App.js";
});

我的js文件的系统目录结构 enter image description here

我的 VSCodeOnline Director 结构 enter image description here

我的浏览器控制台输出 enter image description here

我的尝试

我认为可能会有一些路径问题,所以我简化了我的路径并创建了一个 lib 文件夹并将这三个 js 文件复制到该目录但仍然没有用。我可以肯定的是,因为我安装了所有这些 js 库使用 bower 这就是我遇到这些问题的原因。 这个问题背后的真正原因是什么以及如何解决这个问题。我在 stackoverflow 上针对类似问题尝试了各种其他解决方案,但没有奏效。

那么有什么解决办法吗?还是我应该只使用 CDN?

已更新

我的三个js文件

Angular.min.js bootstrap.min.js jquery.min.js

最佳答案

您可能错误地使用了 express 静态中间件。 https://expressjs.com/en/starter/static-files.html

您使用 express static 中间件将“public”的内容设置为静态文件,如下所示:

app.use(express.static("./public"))

这假设在您的 Node 进程运行的同一目录中,有一个名为“public”的文件夹。如果 public 中有一个名为 image.jpg 的文件那么您只需通过执行 <img src="image.jpg> 即可访问它.

但是当您在服务器上加载脚本时,您会尝试从名为“bower_components”的文件夹中获取它们。我假设 Bower 组件不在您的公共(public)文件夹中。

 <script type="text/javascript"  src='bower_components/jquery/dist/jquery.min.js'></script>

由于您的服务器无法在您的公用文件夹中找到该脚本,它默认到下一行告诉它发送 main.html 如果它没有被其他任何东西捕获。

.get("*",function(req,res){
    res.sendfile("public/main.html");
})
.listen(3000);

问题是浏览器需要一个 js 文件,但却得到一个 html 文件,其中很可能有一堆“<”并抛出错误。

尝试转到 localhost:3000/fjdlsfjd.js你应该看到它仍然服务于你的 main.html。

解决此问题的一种方法可能是同时提供 bower_components文件夹。

app.use(express.static("relative/path/to/bower_components"))

并更改 src 属性以反射(reflect)此更改

src="jquery/dist/jquery.min.js"

或者您可以将要静态提供的每个文件移动到您的公共(public)目录中。

把静态中间件想象成做类似的事情

app.get("file.ext", func( req, res) {
    res.sendFile("/path/to/file.ext");
})

给定目录中的每个文件除外。

关于javascript - Angular .min.js :1 Uncaught SyntaxError: Unexpected token <,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45894442/

相关文章:

javascript - 从 Angular 工厂内调用函数

Javascript正则表达式: Second occurrence of block: ABC. js音乐符号

javascript - 动态创建具有高度和宽度的输入

jquery - 根据容器上的类切换主体颜色

javascript - 我可以在angular js asp.net mvc中调用Controller中的Route Provider服务吗

javascript - 无法将组件导入故事书

jquery - 从 jquery 数据表中删除第一个和最后一个分页

AngularJS SSL .htaccess 问题

javascript - Angular 4 - 将数据传递到组件中

javascript - 如何验证 onblur 事件中的文本框?