You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Express中EJS无法运行,访问显示目录列表页面求助

解决Express EJS无法正常渲染的问题

核心问题分析

页面显示目录列表、改后缀为.html能访问的情况,大概率是静态文件中间件配置错误,或是项目结构不符合Express默认约定,导致Express优先返回静态文件/目录列表,没有触发EJS渲染路由。

排查与修复步骤

  1. 检查项目结构是否符合约定
    必须保持如下结构:

    项目根目录/
    ├── app.js
    ├── views/
    │   └── index.ejs
    ├── node_modules/
    └── package.json
    

    确保index.ejs确实在views文件夹下,没有放错位置。

  2. 修正静态文件中间件(关键)
    如果代码里加了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')))
    
  3. 显式设置Views目录路径
    虽然Express默认会查找根目录下的views文件夹,但显式设置可避免路径解析问题:

    app.set('views', path.join(__dirname, 'views'))
    
  4. 确保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}`)
})

测试验证

  1. 删除项目根目录下可能存在的index.html文件(避免干扰路由)
  2. 重启项目:node app.js
  3. 访问http://localhost:3000,应该能正常渲染EJS中的<h1>Hello World, there!</h1>内容

内容的提问来源于stack exchange,提问作者Musti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 05:07:25