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

Express JS中服务器端变量无法在Pug视图渲染的问题

问题排查与解决方案

1. 修正Pug变量引用语法

如果要在客户端JS中使用后端传递的数组,必须用不转义插值将数组转为合法的JSON字符串:

script.
  const clientArr = !{JSON.stringify(backendArray)};
  • 避免用#{}:它会转义HTML特殊字符,导致JS解析数组时出现语法错误;!{}会输出原始JSON,确保客户端能正确识别为数组。
  • 若只是在HTML中渲染数组文本,直接用#{backendArray}即可。

2. 核对后端变量传递细节

  • 确认res.render的第二个参数中变量名拼写完全一致,比如后端传res.render('index', { todoList: arr }),Pug中不能写成#{todolist}。
  • 确保变量赋值完成后再调用res.render:如果是异步操作(比如数据库查询),必须在回调/then块内执行渲染,避免提前调用导致变量未赋值。

3. 验证视图引擎配置

检查app.js中是否正确配置Pug相关参数:

const path = require('path');
app.set('view engine', 'pug');
app.set('views', path.join(__dirname, 'views')); // 确保指向项目真实的视图目录

若views路径错误,会渲染默认空模板,导致传递的变量无法显示。

4. 排查模板内的逻辑判断

检查Pug中是否存在条件渲染逻辑错误,比如误写为if !backendArray(仅数组为空时显示),而实际数组有值,导致内容被隐藏。可以临时去掉条件判断,直接渲染变量测试。

5. 确认变量未被后续代码覆盖

避免在res.render之后修改传递的变量,比如:

// 错误示例:后续代码清空了变量
let backendArray = [1,2,3];
res.render('index', { backendArray });
backendArray = [];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 20:27:16