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

Node.js下Express服务报TypeError 500 无法读取undefined属性求助

Express服务Jade模板渲染500 TypeError问题解决方案

报错信息:TypeError 500 所有值均为undefined,先触发Cannot read property 'id' of undefined,渲染模板时触发Cannot read property 'title' of undefined

错误栈详情:

500 TypeError: C:\Nodejs\NodejsBlog\apps\
    
Cannot read property 'title' of undefined
   21| .col-md-12
    22| .posts
    > 23| h3= post.title
    24| p=post.body
    25| p tag:
    26| i=post.tag
Cannot read property 'title' of undefined
at eval (eval at (C:\Nodejs\NodejsBlog\node_modules\jade\lib\jade.js:152:8), :221:59)
at C:\Nodejs\NodejsBlog\node_modules\jade\lib\jade.js:153:35
at Object.exports.render (C:\Nodejs\NodejsBlog\node_modules\jade\lib\jade.js:197:10)
at Object.exports.renderFile (C:\Nodejs\NodejsBlog\node_modules\jade\lib\jade.js:233:18)
at View.exports.renderFile [as engine] (C:\Nodejs\NodejsBlog\node_modules\jade\lib\jade.js:218:21)
at View.render (C:\Nodejs\NodejsBlog\node_modules\express\lib\view.js:76:8)
at Function.app.render (C:\Nodejs\NodejsBlog\node_modules\express\lib\application.js:504:10)
at ServerResponse.res.render     (C:\Nodejs\NodejsBlog\node_modules\express\lib\response.js:798:7)
at C:\Nodejs\NodejsBlog\apps\blog\routes.js:64:14
at callbacks (C:\Nodejs\NodejsBlog\node_modules\express\lib\router\index.js:164:37)

根因定位

错误栈最终指向C:\Nodejs\NodejsBlog\apps\blog\routes.js第64行的res.render调用,核心问题是路由层没有将有效的post对象传递给Jade模板,模板渲染时读取post.title的目标对象为undefined。更早出现的id读取错误是前置诱因,通常是获取请求参数或者查询数据时目标对象为空。

排查修复步骤

  • 检查路由层传参逻辑
    打开routes.js定位到第64行,确认res.render的第二个参数是否正确传递了post字段,以及获取post数据的逻辑是否正常。
    错误示例(漏传post):
    // 错误写法:模板参数中没有post字段
    Post.findById(req.params.id, (err, post) => {
      res.render('post', {})
    })
    
    正确写法:
    Post.findById(req.params.id, (err, post) => {
      // 先处理错误和空数据情况
      if (err || !post) {
        return res.status(404).send('查询的内容不存在')
      }
      // 正确传递post参数
      res.render('post', { post: post })
    })
    
  • 修复id读取错误
    检查获取id的代码是否正确,常见错误是将req.params.id写为req.param.id,或者请求路径没有对应携带id参数,导致读取id的目标对象为undefined。
  • 模板层加空值兜底
    可以在Jade模板中增加非空判断,避免空值直接抛出500错误:
    .col-md-12
      .posts
        if post
          h3= post.title
          p=post.body
          p tag:
            i=post.tag
        else
          h3 暂无对应内容
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:57:04