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

Node.js Express开发中EJS无法导入公共页头组件问题求助

问题根因

你虽然配置了EJS模板引擎,但所有路由都通过res.sendFile()直接返回静态文件,Express完全不会对文件内容做EJS语法解析,模板里的EJS代码只会被当作普通文本发送给浏览器,因此页面会直接显示<%- include('partials/header') %>字符串,无法渲染页头组件。

完整修复步骤
  • 调整模板文件后缀
    把src/views目录下的主页面文件从.html后缀全部改为.ejs后缀:

    • 原index.html → index.ejs
    • 原admin.html → admin.ejs
    • 原aboutme.html → aboutme.ejs
      无需修改partials目录下的header.ejs后缀
  • 修改入口文件的路由返回逻辑
    用EJS专属的res.render()方法替换原有res.sendFile(),同时显式指定EJS视图的查找路径,修改后的index.js核心代码如下:

    var express = require('express')
    var app = express()
    const port = 8080;
    
    // 指定EJS模板的根查找路径,匹配你的文件目录结构
    app.set('views', './src/views');
    // 配置EJS为模板引擎
    app.set('view engine', 'ejs');
    
    app.get('/', (req, res) => {
        // 直接传入模板文件名,无需加.ejs后缀
        res.render('index');
    });
    
    app.get('/secret', (req, res) => {
        res.render('admin');
    });
    
    app.get('/aboutme', (req, res) => {
        res.render('aboutme');
    });
    
    app.listen(port, () => {
        console.log(`Example app listening on port ${port}!`)
    });
    
  • 校验目录结构
    确保文件层级符合EJS的查找规则:

    src/
    └── views/
        ├── index.ejs
        ├── admin.ejs
        ├── aboutme.ejs
        └── partials/
            └── header.ejs
    

    这样主模板里的<%- include('partials/header') %>就能正确定位到页头组件文件,正常渲染。

额外注意点

当前页面引入Bootstrap 4.5资源,但页头组件使用Bootstrap 5的折叠导航属性(data-bs-开头的写法),版本不匹配会导致导航折叠按钮失效,需同步升级Bootstrap资源到对应5.x版本。


内容的提问来源于stack exchange,提问作者mr-possible

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 09:45:09