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

从Firebase取数据至Node.js客户端,Jade模板无法渲染数据求排查

问题排查与修复方案

嘿,我帮你找出问题所在啦!你的代码主要有两个核心问题:异步操作处理顺序不对,还有数据库引用路径错了,我一步步给你讲清楚:

1. 数据库引用路径错误

从你终端输出的JSON结构来看,数据是存在articles节点下的多个子节点里,每个子节点内才是article对象:

{ 
  '-L32RrW6PaBF162cyfDv': { article: { body: 'Test Body', title: 'Test Title' } }, 
  '-L32UMeos7o2bwtPMVTF': { article: { body: 'test', title: 'test' } }
}

但你代码里写了let articlesRef = ref.child('article'),这相当于去articles/article这个不存在的路径找数据,自然拿不到内容!应该直接使用articles根节点的引用。

2. 异步操作未等待完成就渲染模板

ref.once('value')是异步操作,返回的是一个Promise对象,你必须等它拿到数据后,再调用res.render。你之前直接把未完成的Promise传给模板,还没等数据获取就触发了渲染,模板当然无法展示内容。

修正后的路由代码

我用async/await写法帮你调整,逻辑更清晰:

// Add Articles Route
router.get('/', async (req, res, next) => {
  try {
    // 直接引用articles节点,无需额外child('article')
    const ref = firebase.database().ref('articles');
    // 等待异步操作完成,获取数据快照
    const snap = await ref.once('value');
    const articlesData = snap.val();
    
    // Firebase返回的是键值对对象,转成数组方便模板循环
    const articles = Object.values(articlesData).map(item => item.article);
    
    console.log(articles); // 现在能看到整理好的文章数组
    res.render('articles', { title: 'Add Article', articles: articles });
  } catch (err) {
    console.error('获取数据失败:', err);
    next(err); // 把错误传递给错误处理中间件
  }
})

如果你习惯链式调用,也可以写成这样:

router.get('/', (req, res, next) => {
  const ref = firebase.database().ref('articles');
  ref.once('value')
    .then((snap) => {
      const articlesData = snap.val();
      const articles = Object.values(articlesData).map(item => item.article);
      res.render('articles', { title: 'Add Article', articles: articles });
    })
    .catch((err) => {
      console.error('获取数据失败:', err);
      next(err);
    });
})

调整Jade模板的循环逻辑

你需要在循环里输出文章的具体属性,比如标题和内容,修改成这样:

ul
  each article in articles
    li
      h3= article.title
      p= article.body

这样调整后,你应该就能正常看到Firebase里的文章内容啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:43:04