如何在Express中从服务器文件夹上级目录提供HTML文件?
解决Express服务器访问上级目录HTML文件的问题
你的问题出在__dirname指向的是当前服务器脚本所在的/server目录,拼接/index.html后会去/server/index.html查找文件,但实际index.html存放在上级的Project-Directory目录里。下面是几种可靠的解决方法:
方法1:用相对路径跳转上级目录
直接在路径中加入../表示向上一级目录,修改app.get回调即可:
app.get('/', (req, res) => { res.sendFile(__dirname + '/../index.html'); })
方法2:使用Node.js的path模块(推荐,跨平台兼容)
path模块能自动处理不同操作系统的路径分隔符,避免路径适配问题。先引入模块,再用path.resolve构建正确的绝对路径:
const express = require('express'); const path = require('path'); // 引入path模块 const app = express(); app.use(express.json()); app.get('/', (req, res) => { // __dirname指向/server目录,../跳转到上级的Project-Directory res.sendFile(path.resolve(__dirname, '../index.html')); }) const port = 5000; app.listen(port, () => console.log(`Server is listening on port ${port}.`))
方法3:配置静态文件目录(适合多静态资源场景)
如果项目主目录下还有CSS、JS等其他静态文件,可以直接把上级目录设为静态资源目录,Express会自动在该目录下查找文件:
const express = require('express'); const path = require('path'); const app = express(); app.use(express.json()); // 将上级目录设置为静态资源根目录 app.use(express.static(path.resolve(__dirname, '../'))); // 此时访问根路径会自动返回index.html,无需额外编写get路由 const port = 5000; app.listen(port, () => console.log(`Server is listening on port ${port}.`))
内容的提问来源于stack exchange,提问作者Neuroneer
相关产品推荐
相关产品推荐

