Javascript NodeJS+;Express服务的HTML文件未加载js文件?

Javascript NodeJS+;Express服务的HTML文件未加载js文件?,javascript,html,node.js,express,Javascript,Html,Node.js,Express,我正在运行一个NodeJS服务器,它使用catchall路由来服务一个文件'index.html'。在该文件中,我链接到同一目录中的javascript文件。未正确加载该javascript文件。“我的控制台”中的错误为“uncaughtsyntaxerror:Unexpected Token您应该这样设置静态文件夹 app.use(express.static(__dirname + '/public')); 此外,html文件将在/public文件夹中查找脚本文件。您需要为index.ht

我正在运行一个NodeJS服务器,它使用catchall路由来服务一个文件'index.html'。在该文件中,我链接到同一目录中的javascript文件。未正确加载该javascript文件。“我的控制台”中的错误为“uncaughtsyntaxerror:Unexpected Token您应该这样设置静态文件夹

app.use(express.static(__dirname + '/public'));
此外,html文件将在/public文件夹中查找脚本文件。您需要为index.html文件提供脚本文件的正确路径

<script src="/app/views/test.js"></script>

以下是发生的情况:

  • 浏览器请求
    /
    ,您的catchall路由会响应该请求,因此它会返回
    index.html

  • 然后浏览器会在html中的
    /test.js
    处看到一个脚本,因此浏览器会将其解释为
    /test.js
    ,并发出请求。
    express.static
    中间件查找不存在的
    public/test.js
    ,因此它将执行传递到与请求匹配的下一个定义的路由,即catchall路由。这意味着html是为javascript文件发送的,因此您会看到错误

因此,要解决这个问题,您需要将
/test.js
更改为实际的相对路径(
/app/views/test.js
)或使用绝对路径(
/app/views/test.js
),以确保始终使用正确的路径,无论当前路径是什么

此外,您还需要更改以下内容:

app.use(express.static('/public'));
对这样的事情:

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

否则,
express.static
中间件将在文件系统的根目录下查找名为
public
的目录,您的javascript文件请求的catchall路由服务html也会遇到同样的问题。

这不应该是
app.use(express.static(u dirname+'/public')?这就是问题所在,谢谢!只是缺少的名字。显然,我是express的新手:(一周前刚开始学习。嗨,我只是试了一下,但没用。我也试过了”。/app/views/test.js“只是因为。也不起作用。问题是缺少_dirname变量。谢谢。我应该在express.static中使用path.join吗?我实际上也应该将此标记为答案,因为将路径更改为您所说的内容,并将_dirname变量添加到express.static两者结合起来解决问题。:)我真的很感谢你花时间回复和帮助。这个答案比其他答案对我的帮助更大,因为仅仅更改app.use不起作用,它还解释了正在发生的事情以及我们为什么需要进行这些更改
<script src="/app/views/test.js"></script>
app.use(express.static('/public'));
app.use(express.static(__dirname + '/public'));