Node.js+Express+EJS服务器部署后JSON文本渲染缺失问题求助
问题排查:Node.js+Express+EJS部署后页面主体文本缺失
项目背景
基于Node.js、Express.js和EJS开发多语言网站,计划通过请求URL加载对应语言的JSON文件渲染页面文本。本地运行一切正常,但部署到正式服务器后出现异常。
代码结构
text.json
{ "text1" : "My first text", "text2" : "My second text" }
layout.ejs
<body> <%- include('../path/partials/header.ejs') %> <%- body %> <%- include('../path/paritals/footer.ejs') %> </body>
index.ejs
<%= main_text.text1 %> <%= main_text.text2 %>
header.ejs
<%= header_text.text1 %> <%= header_text.text2 %>
路由文件 index.js
const text = require('../my_path_to_json_file/text.json') router.get('/', (req,res) => { res.render("index", {main_text: text, header_text: text}) })
问题现象
- 本地运行预期结果:
My first text My second text My first text My second text
- 部署后异常结果:
My first text <- My second text <- this is the header part of the website My first text
仅header部分文本完整展示,页面主体仅显示第一个JSON文本,后续内容缺失。
排查原因及优化建议
1. 修复模板路径拼写错误
核心问题:layout.ejs中footer的路径拼写错误,将partials误写为paritals。
- 本地开发环境(如Windows)对文件路径大小写/拼写容错性高,即使路径错误可能仍能正常渲染;但正式服务器多为Linux系统,路径严格区分拼写和大小写,找不到footer模板文件会触发渲染异常,甚至中断
<%- body %>后续内容的输出。 - 修复方法:将
../path/paritals/footer.ejs改为../path/partials/footer.ejs。
2. 验证JSON文件完整性与编码
- 检查服务器上的
text.json是否与本地完全一致,无文件损坏或内容截断; - 确保JSON文件采用UTF-8无BOM编码,避免服务器解析JSON时出现异常。
3. 开启渲染调试排查
- 在Express中开启EJS调试模式,查看渲染过程中的错误日志:
app.set('view options', { debug: true });
- 在路由中添加日志输出,确认服务器加载的JSON数据完整:
router.get('/', (req,res) => { console.log('Loaded JSON:', text); // 查看服务器端JSON内容 res.render("index", {main_text: text, header_text: text}) })
4. 规范模板渲染语法
为避免文本渲染时的格式问题,建议在EJS模板中添加HTML标签明确结构,例如:
<!-- index.ejs 修改后 --> <p><%= main_text.text1 %></p> <p><%= main_text.text2 %></p>
5. 清除服务缓存
正式服务器可能缓存了旧的模板文件或JSON数据,重启Express服务或清除服务器缓存后重新测试。
内容的提问来源于stack exchange,提问作者Steporkak
相关产品推荐
相关产品推荐

