在 ejs 模板文件中使用 mongoose 获取数据

Posted

技术标签:

【中文标题】在 ejs 模板文件中使用 mongoose 获取数据【英文标题】:Fetch data with mongoose in ejs template file 【发布时间】:2021-10-22 11:13:44 【问题描述】:

我想在我的 ejs 文件中获取我的数据库中的所有用户。我有 3 个文件,一个模型用于数据,一个 ejs 文件和一个 js 文件用于我的路线。问题是我没有显示任何错误。我的浏览器上只呈现了一个空列表,就好像数据库中没有用户一样。有人可以帮我吗?

这是我的路由 js 文件:

import express from 'express';

import User from "../models/user.js"

const routerUserList = express.Router();

routerUserList.get('/user-list', function(req, res, next) 
  try 
    const users = User.find();
    res.render('user-list', 
      pageTitle: 'Liste des utilisateurs',
      path: '/user-list',
      users: users
    )
   catch (error) 
    res.status(500).json(message : "Une erreur est survenue")
  
)

export default routerUserList

这是我的 ejs 文件:

<%- include('./includes/head.ejs') %>
</head>
<body>
  <%- include('./includes/navigation.ejs') %>
  <main>
    <h1>Liste des utilisateurs</h1>
    <% for(var i=0; i < users.length; i++) %>
      <li><%= users[i]._id %></li>
      <li><%= users[i].name %></li>
      <li><%= users[i].email %></li>
  <%  %>
  </main>
<%- include('./includes/end.ejs') %> 

这是我的模型文件:

import mongoose from 'mongoose'

const userSchema = mongoose.Schema(
  name: type: String, required: true,
  email: type: String, required: true,
  password: type: String, required: true,
  id: type: String
)

export default mongoose.model("User", userSchema)

【问题讨论】:

【参考方案1】:

mongoose 模型总是返回 Promise,你应该解决这个 Promise 以获得一个实际的用户数组。 更新后的代码将如下所示。

import express from 'express';

import User from "../models/user.js"

const routerUserList = express.Router();

routerUserList.get('/user-list', async function(req, res, next) 
  try 
    const users = await User.find();
    res.render('user-list', 
      pageTitle: 'Liste des utilisateurs',
      path: '/user-list',
      users: users
    )
   catch (error) 
    res.status(500).json(message : "Une erreur est survenue")
  
)

export default routerUserList

【讨论】:

以上是关于在 ejs 模板文件中使用 mongoose 获取数据的主要内容,如果未能解决你的问题,请参考以下文章

渲染 EJS 视图中的 Mongoose 对象到 CSV

如何使用 Nodejs/mongodb/mongoose 在 ejs/html 中显示数据库项目?

无法读取未定义的属性“名称” - mongoose、express、nodeJS、ejs

如何在 ejs 模板中使用数组显示来自 mongo 的 json 数据?

在 ejs 模板中获取 url 参数

ejs 获取嵌套对象