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

如何在Vue.js项目中实现EJS的partials功能及Node.js视图相关疑问

Node.js Views 相关知识及问题解答

1. Node.js 中 Views 基础概念

Node.js 生态下(通常搭配Express、Koa这类web框架)的views层对应MVC架构中的视图层,核心作用是将后端获取的业务数据填充到模板中,渲染为HTML内容返回给客户端。如果使用EJS作为模板引擎,框架会默认从项目根目录的views文件夹中查找对应的.ejs模板文件。

  • 常规服务端渲染流程:路由匹配请求后,控制器层从数据库读取商品数据,调用框架内置的渲染方法传入模板名和数据,框架自动完成模板填充,最终返回完整HTML页面。

2. 现有实现思路的问题梳理

你当前的方案存在核心架构矛盾:如果使用Vue.js做前端项目,默认是前后端分离架构,EJS是服务端渲染模板,和Vue的客户端渲染体系不兼容,你预想的带CSS、功能的EJS partial没法直接在Vue项目中复用。
现有思路遗漏了两个核心环节:

  • 前后端分离场景下,EJS的服务端渲染逻辑和Vue的响应式渲染逻辑是两套独立体系,强行混用会大幅提升开发维护成本
  • Axios请求默认用于获取结构化数据,返回EJS渲染的HTML片段和Vue的结合效率远低于直接使用原生Vue组件

3. Axios请求的两种响应方案

方案1:返回JSON数据(更适合Vue项目,推荐)

后端不需要使用EJS做渲染,直接返回结构化的商品数据即可,示例代码(Express框架):

// 商品接口控制器逻辑
app.get('/api/goods', async (req, res) => {
  const { goodsId } = req.query
  let result
  try {
    if (goodsId) {
      // 获取单个商品
      result = await GoodsModel.findById(goodsId)
    } else {
      // 获取商品列表
      result = await GoodsModel.find()
    }
    res.json({ code: 200, data: result, msg: '请求成功' })
  } catch (err) {
    res.status(500).json({ code: 500, msg: '数据查询失败' })
  }
})

前端Axios拿到数据后直接传给Vue组件即可,Vue的单文件组件本身完全覆盖了EJS partial的复用能力,自带模板、样式、交互逻辑,适配Vue的响应式特性。

方案2:返回EJS渲染的HTML片段(仅适合多页应用混合场景,不推荐和Vue混用)

如果确实需要返回渲染完成的商品HTML片段,可以直接调用render方法渲染你的partial模板,示例代码:

app.get('/api/goods-partial', async (req, res) => {
  try {
    const goodsList = await GoodsModel.find()
    // 渲染views目录下的goods-partial.ejs模板,传入商品数据
    res.render('goods-partial', { goodsList }, (err, htmlStr) => {
      if (err) return res.status(500).json({ msg: '模板渲染失败' })
      res.send(htmlStr)
    })
  } catch (err) {
    res.status(500).json({ msg: '查询失败' })
  }
})

前端Axios拿到HTML字符串后可以通过v-html指令插入到Vue页面中,但该方式返回的内容无法和Vue的响应式逻辑打通,样式、事件都需要在EJS模板中独立完成,仅适合非交互的静态片段场景。

4. Vue中实现EJS partials等效功能的方案

你不需要在Vue项目中引入EJS,直接封装Vue组件即可实现完全一致的复用能力:

  • 将单个商品的样式、模板、交互逻辑封装为GoodsItem.vue公共组件,对应你原本计划写的单个商品EJS partial
  • 将商品列表封装为GoodsList.vue组件,内部循环调用GoodsItem组件,对应你原本计划的多商品EJS partial
  • 需要使用的页面直接导入组件传入商品数据即可,复用逻辑和EJS partial完全一致,且适配Vue的技术体系。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 15:15:04