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

Express+EJS开发中部分独立EJS Partial文件加载后无法正常渲染问题

问题原因
  • 路由重复定义:index.js中存在两个相同的GET /路由,Express按注册顺序优先匹配第一个路由,第二个路由完全不生效,属于基础配置错误。
  • 模板标签未闭合:你提供的index.ejs片段中<body>、<div id="mainContent">等多个标签无对应闭合标签,EJS渲染时遇到未闭合的标签、语法错误的partial文件会直接截断渲染,这是你页面到指定位置就停止渲染的核心原因。你提到JS逻辑可正常运行,是因为JS逻辑都在已经渲染完成的前半部分页面中,后半部分未被输出到响应,所以不会触发报错。
  • 静态资源配置错误:你将views、partials这类模板目录设置为静态资源目录,既会导致模板源文件泄露的安全问题,也可能干扰EJS的模板查找逻辑。
  • 故障partial文件存在语法问题:拆解嵌套后仍无法渲染blog3和contact区域,说明blog3.ejs、contact.ejs两个文件内部存在语法错误,比如未转义的特殊字符、缺失的EJS闭合标签、路径引用错误。
解决方案
  1. 修复基础配置
    删除重复的根路由,移除冗余的静态资源配置,调整后index.js核心代码如下:
const express = require('express');
const ejs = require('ejs');
const app = express();
const http = require('http');
const nodemailer = require("nodemailer");
const sass = require('sass');

// 仅保留public作为静态资源目录,模板目录不需要暴露
app.use(express.static('public'));

app.set('view engine','ejs');
// 开启EJS调试模式,方便定位渲染错误
app.set('view options', { debug: true });

// 唯一根路由,删除之前重复的第二个app.get('/', ...)
app.get('/', function(req, res){
  res.render('pages/index');
  console.log('pages/index hit')
});

console.log('static site!! listening on:3005 started at: '+Date())
console.log('find app on: localhost:3005 ')
app.listen(3005);

http.createServer(function(req,res){
res.writeHead(200,{'Content-Type':'text/plain'});
res.end('future api dev here');
}).listen(8080);
  1. 补全所有模板闭合标签
    检查index.ejs以及所有partial文件,确保所有打开的HTML标签、EJS语法标签都有对应的闭合标签,比如每个<div>都要有对应</div>,EJS的<%、<%-都要有对应%>闭合。
  2. 单独排查故障partial
    将index.ejs中其他内容全部注释,仅保留blog3.ejs、contact.ejs的引入语句,逐文件测试渲染结果。如果单个文件引入就无法渲染,检查文件内部是否有语法错误、路径引用错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 14:09:05