【问题标题】:Browser thinks that the HTML file is a js file浏览器认为html文件是js文件
【发布时间】:2022-01-24 16:56:30
【问题描述】:

我正在使用 NodeJS 和 Express 编写网站。使用 2 个路由参数指定链接后:

app.get('/game/:port/:player/', function(req, res) {
    res.sendFile(path.join(__dirname, '/game/game.html'));
})

- 结果是一个空白的白色页面。 查看 DevTools,我看到了错误 Uncaught SyntaxError: Unexpected token '<' game.js:1。看起来浏览器正在将 html 文件解释为 JavaScript 文件!我认为这是因为浏览器试图从/game/(portnumber)/(playernumber) 而不是/game 获取js 和css 文件。并且 css 显示为实际的 HTML 文件:

但是,我只有 1 个路由参数的另一条路由工作得很好!我对 Express 还比较陌生,所以我不太了解获取目录的工作原理。

有没有什么方法可以在不手动指定每个包含 HTML 文件的路径的情况下修复此目录错误?

【问题讨论】:

    标签: javascript node.js express


    【解决方案1】:

    您可以使用express.static 中间件指定您的客户有权访问的公共目录:

    https://expressjs.com/en/starter/static-files.html

    app.use('/static', express.static('public'))
    
    http://localhost:3000/static/images/kitten.jpg
    http://localhost:3000/static/css/style.css
    http://localhost:3000/static/js/app.js
    http://localhost:3000/static/images/bg.png
    http://localhost:3000/static/hello.html
    

    【讨论】:

      【解决方案2】:

      这与 Express 没有任何关系。这是基本的 URL 解析。

      浏览器将请求/game/3561/2并返回一个HTML文档

      该文档将告诉它加载./game.js,它将解析为 /game/3561/game.js(因为以 . 开头的 URL 表示“从当前目录解析路径”)。

      这不是您的 JS 文件的 URL,因此您会得到一个 HTML 文档 — 其中 :playergame.js

      您需要在src 属性中写入JS 文件的实际URL。

      【讨论】:

      • 那么 URL 应该是什么?我尝试使用 /home/pi/dir/game/game.js (服务器文件在 'dir' 目录中),但结果是一样的。它应该与什么相关?
      • 我不知道,您显示的代码都不会为该 JS 文件提供服务。
      猜你喜欢
      • 1970-01-01
      • 2014-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-04
      • 2020-12-31
      相关资源
      最近更新 更多