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
相关产品推荐
相关产品推荐

