SyntaxError:期望表达式,得到'<'

und*_*ore 51 javascript node.js express angularjs

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
})
Run Code Online (Sandbox Code Playgroud)

错误:在此输入图像描述

我正在使用Angular Js,它的文件夹结构就像波纹管一样

在此输入图像描述

我在这里缺少什么?

T.J*_*der 49

这段代码:

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

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

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


dev*_*onj 10

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

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

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

目录public包含我的index.html,并引用bower_components文件夹中的所有角度文件.

我相信express.static部分正确地提供静态文件(index.html引用的.js和css文件).根据您的代码判断,您可能需要使用此行代替:

app.use(express.static(__dirname));
Run Code Online (Sandbox Code Playgroud)

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

我想@TJ Crowder试图说的是使用app.route发送不同于index.html的不同文件,因为只使用index.html会让你的程序只查找.html文件并导致JS错误.

希望这个有效!


Nic*_*Roz 8

主要的想法是以某种方式返回HTML而不是Javascript.

原因可能是:

  • 错误的道路
  • 资产本身

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

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

格式化为HTML而不是Javasript的错误完全回溯.

确保资产已成功预编译.


gig*_*att 6

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

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

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


Erl*_*lan 5

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

原因:服务器和服务器上的资源限制发送登录页面而不是javascript页面.

解决方案:允许用户访问资源或删除限制.