【问题标题】:Render data in ejs with mongoose使用 mongoose 在 ejs 中渲染数据
【发布时间】:2020-06-23 11:23:55
【问题描述】:

我正在构建一个用户可以注册和登录的应用程序,该部分正在处理用户提交的数据,这些数据存储在具有 Mongoose 模型的 MonboDB 数据库中。

现在我正在尝试使用 ejs 模板引擎呈现数据。我修复了我可以渲染数据库中的所有数据

.get('/dashboard', auth, async (req, res) =>  {
    try {
        const users = await User.find({}).lean()
        res.render('pages/dashboard', {users})
    } catch (err) {
        console.log(err)
        res.status(500).send('er ging iets mis')
    }
})

这是我的路线中的 user.js

这是我的 dashboard.ejs

<%- include ('../partials/head') %>

<body>
<%- include ('../partials/header') %>
<% users.forEach((user, index) => { %>
    <p>Welkom <%= user.firstname %></p>
    <p>Leeftijd: <%= user.age %></p>
<% }) %>
<%- include ('../partials/nav') %>
</body>

此代码呈现数据库中的所有内容,因此如果我在 de 数据库中有 2 个用户,那么我会从这两个用户那里取回名字和年龄。现在我只想渲染登录用户的数据。我该怎么做?

我的代码也在Github

【问题讨论】:

    标签: node.js mongodb express mongoose ejs


    【解决方案1】:

    你目前在这里拥有什么:

    .get('/dashboard', auth, async (req, res) =>  {
        try {
            const users = await User.find({}).lean()
            res.render('pages/dashboard', {users})
        } catch (err) {
            console.log(err)
            res.status(500).send('er ging iets mis')
        }
    })
    

    正在执行查询以获取数据库中的所有用户,然后将结果传递给模板,这就是页面呈现您拥有的所有用户的原因。要仅呈现已登录用户的数据,您应该只将已登录用户(不是所有用户)的数据传递到模板中。

    我检查了链接存储库中的 auth 中间件,我可以看到它通过解码存储在请求 cookie 中的令牌(在登录时提供给用户)来检查授权。中间件还负责查找(从数据库中)与请求令牌相关联的用户,即登录用户,它将这个用户存储在请求对象中作为req.user。因此,显示单个用户数据的路由应该是这样的:

    .get('/userPage', auth, async (req, res) =>  {
        try {
            // The auth middleware already took care of fetching the 
            // data of the logged-in user
            const user = req.user;
            res.render('pages/userPage', {user})
        } catch (err) {
            console.log(err)
            res.status(500).send('er ging iets mis')
        }
    })
    

    我在该路由中使用pages/userPage 模板,因为您为仪表板创建的模板是为了呈现用户列表,如果只呈现单个用户,您需要修改仪表板模板或创建一个单独的模板。模板可以是这样的:

    <%- include ('../partials/head') %>
    
    <body>
    <%- include ('../partials/header') %>
    <p>Welkom <%= user.firstname %></p>
    <p>Leeftijd: <%= user.age %></p>
    <%- include ('../partials/nav') %>
    </body>
    

    我希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2018-11-22
      • 2019-02-03
      • 2019-01-20
      • 1970-01-01
      • 2018-12-26
      • 1970-01-01
      • 1970-01-01
      • 2016-03-01
      • 2020-05-16
      相关资源
      最近更新 更多