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

初始化server.js后HTML无法调用外部JS文件函数的问题咨询

问题1:代码无法正常运行的原因

你当前编写的HTTP服务逻辑存在固定返回的问题:无论客户端请求什么路径(比如请求首页/,或者请求JS文件/scripts/test.js),服务端永远只会返回index.html的内容,且响应头的内容类型统一设置为text/html。
当浏览器加载完index.html之后,会自动解析页面内的<script src="scripts/test.js"></script>标签,向服务端发起获取JS文件的请求,此时服务端返回的仍然是HTML文本,浏览器尝试将HTML代码作为JS执行,自然会抛出语法错误,也找不到你定义的letMeCallYou函数。

问题2:修复后的server.js代码

你需要修改服务端逻辑,根据请求的路径返回对应的资源,并且设置正确的响应头。修改后的完整代码如下:

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

const PORT = 8080;

http.createServer(function (request, response) {
    // 解析请求路径
    let filePath = '.' + request.url;
    if (filePath === './') {
        filePath = './index.html';
    }

    // 获取请求文件的后缀名,设置对应的Content-Type
    const extname = String(path.extname(filePath)).toLowerCase();
    const contentType = {
        '.html': 'text/html',
        '.js': 'application/javascript',
        '.css': 'text/css'
    }[extname] || 'application/octet-stream';

    // 读取对应文件返回
    fs.readFile(filePath, function(error, content) {
        if (error) {
            // 文件不存在返回404
            response.writeHead(404);
            response.end('File not found');
        } else {
            // 返回正确的资源和响应头
            response.writeHead(200, { 'Content-Type': contentType });
            response.end(content, 'utf-8');
        }
    });
}).listen(PORT);

修改说明:

  • 不再预先读取index.html,而是每次收到请求后根据路径判断要返回的资源
  • 自动识别请求的文件类型,设置对应的响应头,保证浏览器可以正确解析JS、CSS等资源
  • 新增了404错误处理逻辑,资源不存在时会明确返回错误提示

内容的提问来源于stack exchange,提问作者Jask_Skull

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:54:04