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

请求协助改造Express+Mongoose的findAll方法以适配Router渲染EJS

改造Express+Mongoose的Controller方法以支持页面渲染

1. 改造Controller中的findAll方法

原来的方法直接操作响应对象返回JSON,现在我们把它改成返回查询数据,同时用async/await处理异步查询:

// controllers/Form.Controller.js
const Form = require('../models/Form'); // 引入你的Form模型

exports.findAll = async () => {
  try {
    // 用await等待Mongoose查询完成,拿到结果
    const forms = await Form.find();
    return forms;
  } catch (err) {
    // 抛出错误,让调用方(Router)处理错误响应
    throw new Error(`查询表单失败: ${err.message}`);
  }
};

2. 改造Router,调用方法并渲染页面

在Router中新增页面路由,调用改造后的findAll方法获取数据,再渲染index.ejs:

// routes/Form.Router.js
const express = require('express');
const router = express.Router();
const formController = require('../controllers/Form.Controller');

// 渲染表单列表页面的路由
router.get('/', async (req, res) => {
  try {
    // 用await获取Controller返回的表单数据
    const forms = await formController.findAll();
    // 把数据传给ejs模板,渲染页面
    res.render('index', { forms });
  } catch (err) {
    // 捕获错误,返回500状态并渲染错误页(或直接返回错误信息)
    res.status(500).render('error', { errorMsg: err.message });
  }
});

// 保留原API路由(如果需要继续提供JSON接口)
router.get('/api/forms', async (req, res) => {
  try {
    const forms = await formController.findAll();
    res.status(200).json(forms);
  } catch (err) {
    res.status(500).json({ message: err.message });
  }
});

module.exports = router;

3. 在EJS模板中使用数据

在index.ejs里可以直接遍历传入的forms数据:

<!-- views/index.ejs -->
<!DOCTYPE html>
<html>
<head>
  <title>表单列表</title>
</head>
<body>
  <h1>所有表单</h1>
  <div class="form-list">
    <% if (forms.length > 0) { %>
      <% forms.forEach(form => { %>
        <div class="form-item">
          <h3><%= form.name %></h3> <!-- 替换为你的Form模型字段 -->
          <p><%= form.description %></p>
        </div>
      <% }) %>
    <% } else { %>
      <p>暂无表单数据</p>
    <% } %>
  </div>
</body>
</html>

关键说明

  • async/await是Promise的语法糖,async标记的函数会返回Promise,内部用await等待异步操作完成。
  • Controller只负责数据查询逻辑,不处理响应,符合MVC的职责分离原则。
  • 错误统一在Router层处理,避免Controller和响应对象耦合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 18:33:17