我正在构建一个用户可以注册和登录的应用程序,该部分正在处理用户提交的数据,并将其存储在具有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上
答案 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>
我希望这会有所帮助。