Node.js中用Pug读取JSON时嵌套属性访问报错问题
解决Pug模板无法访问嵌套JSON属性的问题
排查步骤与解决方案
1. 先确认Node.js端的settings解析结果
在res.render前添加打印代码,检查req.session.settings的类型和解析后的值(查看Node.js终端输出,不是浏览器控制台):
console.log("session settings类型:", typeof req.session.settings); console.log("session settings原始值:", req.session.settings); const parsedSettings = JSON.parse(req.session.settings); console.log("解析后类型:", typeof parsedSettings); console.log("解析后值:", parsedSettings); res.render("memberships", { title: "DashRoc - Membresías", settings: parsedSettings });
- 如果
解析后类型是object,且解析后值包含完整的memberships对象,说明问题出在Pug模板端; - 如果
解析后类型是string,说明req.session.settings是双重序列化的JSON字符串,需要再解析一次:const settings = JSON.parse(JSON.parse(req.session.settings));
2. 验证Pug模板中的变量类型
在Pug模板的服务器端逻辑中添加打印(输出到Node.js终端):
- console.log("模板中settings类型:", typeof settings); - console.log("模板中settings值:", settings); - console.log("模板中memberships值:", settings.memberships);
- 若
settings是字符串,回到第一步调整解析逻辑; - 若
settings是对象但memberships为undefined,检查原始JSON的键名拼写(比如大小写、是否有笔误)。
3. 修正Pug模板的判断逻辑
确保判断代码位置正确,且添加前置判断避免属性不存在时报错:
if settings.memberships && settings.memberships.view p 会员视图已启用 else p 会员视图未启用
内容的提问来源于stack exchange,提问作者Francisco Castillo
相关产品推荐
相关产品推荐

