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
相关产品推荐
相关产品推荐

