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

如何无需为每个文件创建路由即可渲染Express.js中的.ejs文件?

实现Express自动渲染EJS页面(无需重复编写路由)

你可以通过动态路由配合文件存在性检查来实现自动匹配并渲染EJS页面,不用为每个页面单独写路由。

1. 修改服务器代码

添加一个通配符路由捕获所有页面请求,同时检查对应的EJS文件是否存在,避免渲染不存在的页面报错:

import express from 'express';
import fs from 'fs/promises';
import path from 'path';

const app = express();
// 设置模板引擎为EJS(原代码缺失该配置,必须添加,否则render时需写完整文件名)
app.set('view engine', 'ejs');
app.set('views', './public');
const PORT = 3002;

// 根路由
app.get('/', (req, res) => {
  res.render('index', { title: 'Page Title'});
});

// 动态匹配所有页面路由
app.get('/:page', async (req, res) => {
  const pageName = req.params.page;
  // 拼接EJS文件路径
  const filePath = path.join(process.cwd(), 'public', `${pageName}.ejs`);
  
  try {
    // 检查文件是否存在
    await fs.access(filePath);
    // 渲染对应EJS页面,可传递通用参数
    res.render(pageName, { title: `${pageName} Page` });
  } catch (err) {
    // 文件不存在时返回404
    res.status(404).send('Page not found');
  }
});

app.listen(PORT, () => {
  console.log(`Server is running at http://localhost:${PORT}`);
});

2. 在index.ejs中添加页面链接

使用不带.ejs后缀的路径作为链接,更符合URL规范:

<!DOCTYPE html>
<html>
<head>
  <title><%= title %></title>
</head>
<body>
  <h1><%= title %></h1>
  <!-- 指向page2页面的链接 -->
  <a href="/page2">前往Page2</a>
  <!-- 新增页面直接添加对应链接即可 -->
  <a href="/page3">前往Page3</a>
</body>
</html>

注意事项

  • 确保./public目录下存在page2.ejs、page3.ejs等对应的模板文件;
  • 若要支持带.ejs后缀的URL,可将动态路由改为/:page.ejs,同时渲染时去掉文件名的.ejs后缀;
  • 页面通用参数(如标题)可在动态路由中统一传递,无需每个页面单独处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 13:03:21