当我执行以下节点代码
时,控制台出现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和它的文件夹结构如下文
我在这里失踪了什么?
答案 0 :(得分:48)
此代码:
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
或angular.min.js
等JavaScript文件时,您的服务器将返回index.html
的内容,该内容以<!DOCTYPE html>
开头,这会导致JavaScript错误。
回调中的代码应该查看请求以确定要发回的文件,和/或您应该使用与app.all
不同的路径模式。有关详细信息,请参阅routing guide。
答案 1 :(得分:10)
试试这个,通常对我有用:
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服务器文件都在同一个目录中。
我想@ T.J。 Crowder试图说是使用app.route发送不同于index.html的不同文件,因为只使用index.html会让你的程序只查找.html文件并导致JS错误。
希望这有效!
答案 2 :(得分:8)
主要思想是以某种方式返回了HTML而不是Javascript。
原因可能是:
可能是由错误的资产预编译引起的。就我而言,由于编码错误,我发现了这个错误。
当我打开我的应用程序时,我看到了
application error Encoding::UndefinedConversionError at /assets/application.js
有完全回溯的错误格式为HTML而不是Javasript。
确保资产已成功预编译。
答案 3 :(得分:5)
我有同样的错误。在我的情况下
原因:限制服务器上的资源,服务器正在发送登录页面而不是javascript页面。
解决方案:允许用户访问资源或删除限制。
答案 4 :(得分:3)
当你在html中放置一个内联标记时,你也可以得到这个错误信息,但是(对我来说很常见)拼写错误,你忘记将斜杠添加到closing-script标签,如下所示:
<script>
alert("I ran!");
<script> <!-- OOPS opened script tag again instead of closing it -->
JS解释器尝试“执行”标记,该标记看起来像一个以小于号开头的表达式,因此出现错误:SyntaxError: expected expression, got '<'
答案 5 :(得分:0)
当我将Wordpress网站迁移到另一台服务器时,我遇到了同样的错误。 我的js脚本标题中的URL仍指向旧服务器和域名。
更新域名后,错误就消失了。
答案 6 :(得分:0)
我使用Angular js遇到了类似的问题。我在.htaccess中重写了所有index.html。 解决方案是添加正确的路径斜杠。 每种情况都是独特的,但希望这有助于某人。
答案 7 :(得分:0)
如果您的文件包含错误的路径并且服务器在加载文件时出现404错误,则会出现此问题。
答案 8 :(得分:0)
我使用经过身份验证的ASPNET应用程序解决了这个问题,方法是将webResource.axd添加为web.config上的一个位置,以便匿名用户授权
<location path="WebResource.axd">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
答案 9 :(得分:0)
只需添加:
app.use(express.static(__dirname +'/app'));
其中'/app'
是index.html所在的目录或您的Webapp。
答案 10 :(得分:0)
我在Django上遇到了这个类型的问题,我的问题是忘记将static
添加到<script>
标记。
例如在我的模板中:
<script type="text/javascript" src="css/layer.js"></script>
我应该像这样添加static
:
<script type="text/javascript" src="{% static 'css/layer.js' %}" ></script>
答案 11 :(得分:0)
这对你有用。如果你正在使用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'));
});
答案 12 :(得分:0)
可能对某人有帮助。我遇到的错误是
SyntaxError:期望的表达式,得到了'<'
我在chrome中点击了查看源代码,然后发现了这个错误
通知:未定义的变量:字符串 D:\ Projects \ demo \ ge.php 在第 66
行
问题是这段代码片段,
$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'].'"},';
}
解决了这个问题。