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

ES6环境下Express路由失效:学生CRUD项目无法加载EJS视图

问题解决:Express.js路由失效导致无法访问/student/

问题根源及修复步骤

1. 主文件app.js中路由挂载方式错误

原代码用app.get('/student', web)挂载路由是错误的逻辑:app.get仅用于绑定单个GET请求,而web是Express Router实例,必须用app.use挂载才能让Router内的所有路由规则生效。

修改app.js中的路由加载代码:

// 替换原app.get('/student',web)
app.use('/student', web)

2. 路由文件web.js中路由绑定语法错误

router.route('/', StudentController.getAllDoc)不符合Express规范:route方法仅接收路径参数,需通过链式调用HTTP方法(如.get())绑定控制器函数。

修改web.js中的路由定义:

// 替换原路由代码
router.route('/').get(StudentController.getAllDoc)
// 也可使用更简洁的写法:
// router.get('/', StudentController.getAllDoc)

3. 可选:确保视图目录配置正确

如果views目录不在项目根目录,需手动指定视图路径(若已在根目录可省略):

// 在app.set("view engine","ejs")前添加
app.set('views', join(process.cwd(), 'views'))

修复后完整代码示例

app.js

import express from 'express';
import connectDB from './db/connectdb.js'
import web from "./routes/web.js"
import{join} from 'path'
const app = express();
const port = process.env.PORT || "8080"
const DATABASE_URL ="mongodb://127.0.0.1:27017"

// 加载静态文件
app.use('/student',express.static(join(process.cwd(),"public")))

// 正确挂载路由
app.use('/student', web)

// 设置模板引擎及视图目录(可选)
app.set('views', join(process.cwd(), 'views'))
app.set("view engine","ejs")

app.listen(port,()=>{
    console.log("Server listening at port no:"+port)
})
connectDB(DATABASE_URL)

web.js

import express from 'express';
import StudentController from "../controllers/studentController.js"
const router = express.Router();

// 正确绑定GET请求到控制器
router.route('/').get(StudentController.getAllDoc)

export default router

studentController.js

class StudentController{
    
  static getAllDoc = (req,res)=>{
    res.render('index')
    }

}
export default StudentController

重启服务器后,访问http://localhost:8080/student/即可正常加载views目录下的index.ejs视图。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 00:11:03