【问题标题】:SyntaxError: expected expression, got '<'语法错误:预期的表达式,得到 '<'
【发布时间】:2021-08-30 18:11:43
【问题描述】:

当我执行以下节点代码时,控制台中出现SyntaxError: expected expression, got '&lt;' 错误

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,它的文件夹结构如下所示

我在这里缺少什么?

【问题讨论】:

    标签: javascript angularjs node.js express


    【解决方案1】:

    这段代码:

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

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

    您在回调中的代码应该查看请求以确定要发回的文件,和/或您应该使用 app.all 的不同路径模式。详情请见routing guide

    【讨论】:

    • 那么,获取 index.html 文件的理想方法是什么?
    • @underscore:我刚刚添加了路由指南的链接,详细描述了如何注册路由。
    • @underscore:对于服务器的“主页”(所以,可能是您的index.html),是的。然后,您将需要另一个路由来提供 .js 和其他文件(CSS、/ 以外的页面等)。同样,路线指南有详细信息。
    • 很好的解释。
    【解决方案2】:

    当我将 Wordpress 网站迁移到另一台服务器时,我遇到了同样的错误。 我的 js 脚本标头中的 URL 仍然指向旧的服务器和域名。

    一旦我更新了域名,错误就消失了。

    【讨论】:

      【解决方案3】:

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

      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 中的所有 angular 文件。

      我认为 express.static 部分正确地为静态文件提供服务(您的 index.html 引用的 .js 和 css 文件)。从您的代码来看,您可能需要改用这一行:

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

      您的所有 JS 文件,index.html 和您的 JS 服务器文件似乎都在同一个目录中。

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

      希望这行得通!

      【讨论】:

        【解决方案4】:

        我在使用 Angular js 时遇到了类似的问题。我在 .htaccess 中对 index.html 进行了全部重写。 解决方案是在 . 每种情况都是独一无二的,但希望这对某人有所帮助。

        【讨论】:

          【解决方案5】:

          当您包含路径错误的文件并且服务器在加载文件时出现一些 404 错误时,会出现此问题。

          【讨论】:

            【解决方案6】:

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

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

            解决方案:授予用户资源访问权限或完全取消限制。

            【讨论】:

              【解决方案7】:

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

              原因可能是:

              • 错误的路径
              • 资产自己

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

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

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

              确保资产已成功预编译。

              【讨论】:

              • 感谢错误路径的提示!当我改变时,错误就消失了,例如 :)
              • @nerdess,不客气。我给出了这个答案,因为它发生了接受的答案对我没有帮助
              【解决方案8】:

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

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

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

              【讨论】:

              • 你也错过了开始标签中的T
              • 已修复!谢谢 Sixtoo :-)
              【解决方案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 所在的目录。

                【讨论】:

                • 这会被添加到什么文件中?
                • 这将被添加到从启动脚本调用的主 js 文件中,您可以在 package.json "scripts" -> "start" 或类似文件中找到相同的内容
                【解决方案11】:

                我在 Django 上遇到了这种类型的问题,我的问题是忘记将 static 添加到 &lt;script&gt; 标记中。

                比如在我的模板中:

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

                  【讨论】:

                    【解决方案13】:

                    这可能对某人有帮助。我得到的错误是

                    SyntaxError: 预期的表达式,得到 '

                    我在 chrome 中点击查看源代码后发现了这个错误

                    注意:未定义变量:string in D:\Projects\demo\ge.php66

                    问题在于这段代码的 sn-p,

                    $string= ''; <---- this should be declared outside the loop
                    
                    while($row = mysql_fetch_assoc($result))
                        {
                            $string .= '{ id:'.$row['menu_id'].', pId:'.$row['parent_id'].', name:"'.$row['menu_name'].'"},';
                        }
                    

                    解决了问题。

                    【讨论】:

                      猜你喜欢
                      • 2019-02-20
                      • 1970-01-01
                      • 1970-01-01
                      • 2019-01-11
                      • 1970-01-01
                      • 2021-11-16
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多