You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

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

火山引擎 最新活动