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

Node.js新手求助:/mockServiceWorker.js文件找不到及URL异常问题

解决Node.js服务器中/mockServiceWorker.js文件找不到的问题

先搞懂/mockServiceWorker.js是什么

它是**Mock Service Worker(MSW)**的核心脚本,MSW是用来在浏览器端拦截网络请求做模拟的工具。一旦你的前端代码里注册了MSW,浏览器就会自动向服务器请求这个文件,这就是为什么过一会儿会出现这个请求的原因。

你的代码里的两个关键问题

  1. 条件判断用了赋值运算符=而非比较运算符===
    你写的if (req.url = "/mockServiceWorker.js")是把字符串赋值给req.url,而不是判断是否相等,这会导致所有请求都会被强制改成/mockServiceWorker.js,直接触发文件找不到的错误。

  2. 未正确处理/mockServiceWorker.js的请求
    不管你是不是有意使用MSW,这个请求都会被浏览器发起,你需要明确处理它,避免去读取不存在的文件。

修正后的代码方案

方案1:如果你没在用MSW,直接拦截这个请求返回404

import fs from 'fs';
import http from 'http';
import path from 'path'; // 引入path模块处理文件路径,避免绝对路径问题

http.createServer(async (req, res) => {
    // 拦截mockServiceWorker的请求,直接返回404
    if (req.url === "/mockServiceWorker.js") {
        res.writeHead(404, { "Content-Type": "text/plain" });
        res.write("File not found");
        res.end();
        return;
    }

    let filePath = req.url;
    if (filePath === "/") {
        filePath = "file2.html";
    }
    // 用path.resolve转为绝对路径,避免读取根目录的文件
    const resolvedPath = path.resolve(filePath);
    
    try {
        let text = await fs.promises.readFile(resolvedPath, "utf8");
        res.writeHead(200, { "Content-Type": "text/html" });
        res.write(text);
        res.end();
    } catch (err) {
        // 处理其他文件找不到的情况,返回404
        res.writeHead(404, { "Content-Type": "text/plain" });
        res.write(`File not found: ${filePath}`);
        res.end();
    }
}).listen(3000);

方案2:如果你确实在用MSW,返回正确的脚本文件

如果你是有意使用MSW,需要确保mockServiceWorker.js文件在你的项目目录里,然后修改代码返回这个文件:

import fs from 'fs';
import http from 'http';
import path from 'path';

http.createServer(async (req, res) => {
    let filePath = req.url;
    if (filePath === "/") {
        filePath = "file2.html";
    } else if (filePath === "/mockServiceWorker.js") {
        // 指向MSW的脚本文件路径,根据你的实际位置调整
        filePath = path.resolve('./node_modules/mock-service-worker/browser/mockServiceWorker.js');
        res.writeHead(200, { "Content-Type": "application/javascript" });
    }

    const resolvedPath = path.resolve(filePath);
    
    try {
        let text = await fs.promises.readFile(resolvedPath, "utf8");
        res.write(text);
        res.end();
    } catch (err) {
        res.writeHead(404, { "Content-Type": "text/plain" });
        res.write(`File not found: ${filePath}`);
        res.end();
    }
}).listen(3000);

额外建议

  • 永远用===做严格相等判断,避免==的隐式类型转换问题,更不要把=当成判断用。
  • 处理文件读取时一定要加try/catch,避免服务器因为单个文件错误直接崩溃。
  • 如果不需要MSW,检查你的前端代码里有没有注册MSW的代码(比如worker.start()之类的),删掉就能彻底消除这个请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 11:05:21