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

求助:Handlebars模板无法访问数组内数据的问题

问题解决指南

核心问题:模板遍历路径错误

API返回的JSON结构中,新闻数组嵌套在content字段下,你当前的模板直接遍历obj(根对象),自然无法访问到数组内的title等字段。

修改Handlebars模板

将遍历目标改为obj.content,同时如果需要渲染HTML格式的content字段,要使用三个大括号{{{}}}避免HTML转义:

{{#each obj.content}}
  <article>
    <h2>{{title}}</h2>
    <time>{{date}}</time>
    {{{content}}}
  </article>
{{/each}}

路由代码的优化与修复

你的路由存在两个潜在问题:异步逻辑顺序错误、缺少错误防护,会导致渲染异常或程序崩溃:

修改后的路由代码

router.get('/news', function(req, res) {
  const url = 'https://financialmodelingprep.com/api/v3/fmp/articles?page=0&size=5&apikey=apikey';

  request(url, function(error, response, results) {
    // 先处理请求错误
    if (error || response.statusCode !== 200) {
      return res.status(500).send('获取新闻数据失败');
    }

    try {
      const obj = JSON.parse(results);
      // 优先渲染视图,不等待文件保存(文件保存是额外操作)
      res.render('news', { obj });

      // 异步保存文件,不阻塞响应
      fs.writeFile('data/news/news.json', results, function(err) {
        if (err) {
          console.error('保存新闻文件失败:', err);
        } else {
          console.log('新闻已保存到 news.json');
        }
      });
    } catch (parseErr) {
      // 处理JSON解析错误
      console.error('解析JSON数据失败:', parseErr);
      return res.status(500).send('处理新闻数据失败');
    }
  });
});

代码修改说明

  1. 调整异步逻辑顺序:将视图渲染放在文件保存操作之前,用户无需等待文件写入完成就能看到页面,同时文件保存的错误不会影响页面渲染。
  2. 增加错误防护:用try-catch包裹JSON.parse,避免API返回非JSON格式数据导致程序崩溃;提前判断请求状态码和错误,及时返回错误响应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 09:51:12