用猫鼬在ejs中渲染数据

时间:2020-03-11 13:01:04

标签: node.js mongodb express mongoose ejs

我正在构建一个用户可以注册和登录的应用程序,该部分正在处理用户提交的数据,并将其存储在具有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 database中有2个用户,那么我将从这两个用户那里获取冷杉名称和年龄。现在,我只想呈现已登录用户的数据。我该怎么做?

我的代码也在Github

1 个答案:

答案 0 :(得分: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>

我希望这会有所帮助。