Express中EJS无法运行,访问显示目录列表页面求助
解决Express EJS无法正常渲染的问题
核心问题分析
页面显示目录列表、改后缀为.html能访问的情况,大概率是静态文件中间件配置错误,或是项目结构不符合Express默认约定,导致Express优先返回静态文件/目录列表,没有触发EJS渲染路由。
排查与修复步骤
检查项目结构是否符合约定
必须保持如下结构:项目根目录/ ├── app.js ├── views/ │ └── index.ejs ├── node_modules/ └── package.json确保
index.ejs确实在views文件夹下,没有放错位置。修正静态文件中间件(关键)
如果代码里加了express.static中间件,不要指向项目根目录(比如app.use(express.static(__dirname))),否则Express会优先返回根目录的文件列表,甚至存在index.html时会直接返回它。
正确做法是单独创建public文件夹存放静态资源(如CSS、JS、图片),并将静态中间件指向该文件夹:const path = require('path') // 新增引入path模块 app.use(express.static(path.join(__dirname, 'public')))显式设置Views目录路径
虽然Express默认会查找根目录下的views文件夹,但显式设置可避免路径解析问题:app.set('views', path.join(__dirname, 'views'))确保EJS本地安装
全局安装的EJS不会被项目加载,必须在项目根目录执行:npm install ejs
修正后的完整app.js代码
const express = require('express') const path = require('path') const app = express() const port = 3000 // 显式指定视图文件目录 app.set('views', path.join(__dirname, 'views')) // 设置模板引擎为EJS app.set('view engine', 'ejs') // 静态资源服务(仅指向public目录) app.use(express.static(path.join(__dirname, 'public'))) app.get('/', (req, res) => { res.render('index') }) app.listen(port, () => { console.log(`App listening at port ${port}`) })
测试验证
- 删除项目根目录下可能存在的
index.html文件(避免干扰路由) - 重启项目:
node app.js - 访问
http://localhost:3000,应该能正常渲染EJS中的<h1>Hello World, there!</h1>内容
内容的提问来源于stack exchange,提问作者Musti
相关产品推荐
相关产品推荐

