You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js HTTP2服务器无法同时正常提供静态文件与JavaScript文件服务的问题求助

Node.js HTTP2服务器无法同时正常提供静态文件与JavaScript文件服务的问题求助

我现在正在尝试做一个简单的页面,点击按钮就能发送请求,但在让Node.js服务器正确托管index.html这件事上卡壳了,目前遇到两个麻烦问题:

  • 用勉强能跑的服务器代码时,客户端的请求发送逻辑会在控制台报错;换其他服务器代码的话,直接就出现未定义的错误。
  • 用VSCode的Live Server插件时,页面能正常生成请求,但没法把请求发给自己的服务器(毕竟插件的服务器和我自己的Node服务器不是一回事);但我跑node server.js启动自己的服务器时,只有某段特定的服务器代码能让HTML显示,却会导致JavaScript逻辑完全失效。

这是我的index.html代码,负责调用JavaScript发送请求:

<button id="sendOfferButton">Send Offer</button>
<p id="status">Status: Waiting for interaction...</p>
<script src="script.js"></script>

下面是那段能让HTML显示,但会导致script.js报错的server.js代码。控制台抛出的错误是:

Uncaught SyntaxError: Unexpected token '<'

我排查后发现这个错误和HTML里的<script src=script.js></script>直接相关——看起来服务器没法正确读取请求生成的逻辑代码(也就是script.js)。

这是我目前的server.js代码:

const http2 = require('http2');
const fs = require('fs');
const path = require('path');

const options = {
    key: fs.readFileSync(path.join(__dirname, 'server.key')),
    cert: fs.readFileSync(path.join(__dirname, 'server.cert'))
};
const server = http2.createSecureServer(options, (req, res) => {
    const filePath = path.join(__dirname, '../client', 'index.html');

    fs.readFile(filePath, 'utf-8', (err, data) => {
        if (err) {
            res.statusCode = 500;
            res.end('Internal Server Error');
            return;
        }

        res.setHeader('Content-Type', 'text/html');
        res.end(data);
    });
});

server.listen(3000, () => {
    console.log('Server running on https://localhost:3000');
});

我对HTTP2的运行机制了解不多,不知道为什么自己的代码没法正常工作。我猜测可能是当前的服务器实现是纯静态托管的方式,加载HTML后没法正确访问script.js?

我已经确认客户端逻辑本身是没问题的,现在就卡在怎么让服务器正确托管所有静态文件上了,求大佬帮忙解答!

备注:内容来源于stack exchange,提问作者user27509072

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 17:40:26