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

如何基于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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 02:01:08