Node.js搭建HTML文件服务报错站点无法访问应如何解决
报错诱因
你遇到的类型错误核心原因是没有处理fs.readFile的读取异常场景:
当./samplehtml.html文件读取失败时(常见原因包括文件不存在、相对路径匹配错误、文件读取权限不足),回调函数的err参数会携带错误信息,data参数会是undefined。此时你直接将undefined传入res.write()方法,而该方法要求入参必须是字符串、Buffer或Uint8Array类型,直接触发类型错误导致HTTP服务崩溃,浏览器访问时就会提示站点无法访问。
修复方案
修改逻辑主要包含两点:
- 新增文件读取错误判断分支,异常时返回对应错误响应,避免服务直接崩溃
- 使用绝对路径定位HTML文件,避免相对路径受Node.js进程启动目录影响导致匹配失败
修改后的完整代码如下:
var http = require('http'); var fs = require('fs'); var path = require('path'); http.createServer(function(req, res){ // 用__dirname拼接绝对路径,保证读取的是当前脚本同目录下的samplehtml.html const filePath = path.join(__dirname, 'samplehtml.html'); fs.readFile(filePath,function(err,data){ if (err) { // 读取失败返回500错误 res.writeHead(500, {'Content-Type': 'text/plain;charset=utf-8'}); res.end('文件读取失败:' + err.message); return; } res.writeHead(200,{'Content-Type':'text/html;charset=utf-8'}); res.write(data); res.end(); }); }).listen(7000, () => { console.log('服务已启动,访问 http://localhost:7000 查看'); });
修改后请确认samplehtml.html文件和当前运行的js脚本放在同一目录下即可正常访问。
内容的提问来源于stack exchange,提问作者Riya Babu M
相关产品推荐
相关产品推荐

