如何基于Express路由参数渲染对应名称的Course页面?
问题:根据URL参数渲染对应EJS页面
希望根据不同的name参数值渲染对应的Course/[name].ejs页面,现有Express代码如下,例如访问https://example.com/Course/web时,应渲染Course\web.ejs文件。
原代码:
const express= require('express'); const app = express(); const path =require('path'); app.set('view engine', 'ejs'); app.get('/',(req, res)=>{ res.sendFile(`${__dirname}/index.html`) }) app.get('/Course/:name',(req,res)=>{ const {name} = req.params; console.log({name}); res.render({name}); }) app.listen(3000,()=>{ console.log('server up')})
修正方案
原代码核心问题是res.render()调用方式错误,该方法第一个参数需传入模板文件路径,而非参数对象。修正后的代码如下:
const express= require('express'); const app = express(); const path =require('path'); // 明确EJS模板根目录(若模板默认在views文件夹下可省略) app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'ejs'); app.get('/',(req, res)=>{ res.sendFile(`${__dirname}/index.html`) }) app.get('/Course/:name',(req,res)=>{ const {name} = req.params; console.log(name); // 渲染对应Course目录下的模板,EJS自动补全.ejs后缀 res.render(`Course/${name}`, { name }, (err) => { // 模板不存在时返回404提示 if (err) { res.status(404).send('课程页面不存在'); } }); }) app.listen(3000,()=>{ console.log('server up') })
关键说明
res.render()第一个参数传入Course/${name},对应views/Course/[name].ejs文件(需确保模板文件放在views/Course目录下,目录结构不同可调整路径)- 新增错误回调,避免模板不存在时服务器崩溃,同时给用户明确提示
- 可选设置
views目录,消除路径歧义,提升代码可维护性
内容的提问来源于stack exchange,提问作者Will smith
相关产品推荐
相关产品推荐

