Node.js中HTML文件加载异常:访问本地IP仅显示文件名
解决Node.js返回HTML文件而非文本的问题
嘿,我完全懂你碰到的状况!你现在写的res.send("index.html")其实只是把字符串"index.html"原样发给浏览器了,浏览器收到这个字符串就直接显示出来,根本不会去读取你本地的index.html文件内容,这就是问题所在~
给你两种靠谱的解决方案:
方案一:使用res.sendFile直接返回文件
这个方法适合单独返回某个HTML文件的场景,记得要用Node.js的path模块处理路径,避免相对路径出错:
const express = require('express'); const path = require('path'); const app = express(); app.get('/', (req, res) => { // 用__dirname(当前脚本所在目录)拼接出index.html的绝对路径 res.sendFile(path.resolve(__dirname, 'index.html')); }); app.listen(3000); console.log("Server Started");
这里的path.resolve会把相对路径转换成绝对路径,不管你从哪个目录启动服务器,都能准确找到index.html文件。
方案二:用express.static托管静态资源
如果你的项目还有CSS、JS、图片这类静态文件,这个方法更实用,它会自动托管指定目录下的所有静态资源:
const express = require('express'); const app = express(); // 托管当前目录下的所有静态文件 app.use(express.static(__dirname)); // 其实这一步可以省略,因为express.static默认会把index.html作为根路径的默认页面 app.get('/', (req, res) => { res.redirect('/index.html'); }); app.listen(3000); console.log("Server Started");
小提示
- 确保index.html文件和你的Node.js脚本在同一个目录下,如果不在,要调整路径:比如index.html在
public文件夹里,就把path.resolve(__dirname, 'index.html')改成path.resolve(__dirname, 'public', 'index.html'),或者把express.static(__dirname)改成express.static(path.resolve(__dirname, 'public'))。
内容的提问来源于stack exchange,提问作者Pratik Vanjare




