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

Node.js新手求教:MongoDB数据展示转Handlebars及模板引擎对比

嘿,作为Node.js新手刚上手Handlebars,这几个问题我当年入门的时候也琢磨过,咱们一步步来解决!

1. EJS代码转Handlebars代码

先把你给出的原EJS代码贴出来:

<% if(files){ %>
<% files.forEach(function(file) { %>


<% if(file.isImage) { %>

<% } else { %>
<%= file.filename %>
<% } %>

<% }) %>
<% } %>

对应的Handlebars代码如下,语法更简洁直观:

{{#if files}}
  {{#each files as |file|}}
    <div class="card card-body mb-3">
      {{#if file.isImage}}
        <img src="image/{{file.filename}}" alt="">
      {{else}}
        {{file.filename}}
      {{/if}}
    </div>
  {{/each}}
{{/if}}

简单解释下差异:

  • Handlebars用块级表达式处理条件和循环:{{#if}}对应EJS的<% if() %>,{{#each}}替代forEach循环
  • 变量输出直接用{{变量名}},不需要EJS的<%= %>语法
  • 每个块级标签都需要闭合(比如{{/if}}、{{/each}}),结构更清晰
2. 展示MongoDB数据时切换到Handlebars

切换步骤很清晰,咱们一步步来:

  • 第一步:安装依赖
    在项目根目录运行命令:
    npm install express-handlebars
    
  • 第二步:配置Express使用Handlebars
    在你的Express入口文件(比如app.js)里添加配置:
    const express = require('express');
    const exphbs = require('express-handlebars');
    const app = express();
    
    // 注册Handlebars引擎
    app.engine('handlebars', exphbs.engine());
    // 设置视图引擎为Handlebars
    app.set('view engine', 'handlebars');
    // 指定模板文件存放目录(默认是项目根目录下的views文件夹)
    app.set('views', './views');
    
  • 第三步:从MongoDB取数并渲染模板
    假设你用Mongoose操作MongoDB,先定义好数据模型,然后在路由里查询数据并传给模板:
    // 假设你的File模型定义在models/File.js
    const File = require('./models/File');
    
    app.get('/files', async (req, res) => {
      try {
        // 从MongoDB查询所有文件数据
        const files = await File.find();
        // 渲染views目录下的files.handlebars模板,传入files数据
        res.render('files', { files });
      } catch (err) {
        console.error('获取数据失败:', err);
        res.status(500).send('服务器出错啦');
      }
    });
    
  • 第四步:准备Handlebars模板
    在views目录下创建files.handlebars文件,把第一部分写的Handlebars代码放进去就行。
3. EJS与Handlebars哪个更适用?

这个得看你的场景和习惯:

  • 选EJS的情况:
    • 你刚接触模板引擎,想快速上手,EJS语法和JavaScript几乎无缝衔接,学习成本极低
    • 项目很小,需要快速开发,不在意模板里写少量JS逻辑
    • 你喜欢灵活的写法,比如在模板里直接写循环判断、临时变量
  • 选Handlebars的情况:
    • 你想保持模板的干净,把业务逻辑都放在后端控制器里(符合MVC思想)
    • 团队协作开发,需要统一的模板规范,避免有人在模板里写复杂逻辑导致维护困难
    • 项目规模较大,需要复用一些常用的渲染逻辑(Handlebars支持自定义Helper,比如格式化日期、处理数组)

简单总结:EJS灵活自由,适合小项目和新手快速试错;Handlebars规范约束,适合中大型项目和团队协作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:01:47