如何使用 express 在 mongoose 中传递多个复杂查询,其中嵌入了模式以将其呈现为我的 ejs 文件
How to pass in multiple complex query in mongoose using express where the schema's are embedded to render it my ejs file
//GET /teams/:id/players/:playerId --> single team --> getting single player
module.exports.getPlayer = (req, res, next) => {
TeamModel.findOne({ _id: req.params.id }, (err, result) => {
console.log('Result: ' + result.players);
// let player = _.where(result.players, { id: req.params.playerId })
res.render('playerDetails', {
title: 'Player Details',
playerDetails: result
})
})
};
因为 req.params.id 在 /player/:playerId 之前为我提供了 id
我想要一些可以帮助我获得 id 并最终以 :playerId
结尾的东西
我想传递我的 'playerDetails' 文件。
<td>
<%=playerDetails.players[1].playerName%>
</td>
上面是我的 ejs 文件中的代码,它是一个硬编码值,用于生成玩家名称。
但我只是不知道如何从我的 getPlayer 控制器传递特定的 :playerId,这样我就不必硬编码值来在我的 ejs 文件中列出玩家名称。
我该怎么办?
谢谢
我的控制器功能:
//GET /teams/:id/players/:playerId --> single team --> getting single player
module.exports.getPlayer = (req, res, next) => {
TeamModel.findOne({ _id: req.params.id }, (err, result) => {
res.render('playerDetails', {
title: 'Player Detail',
playerDetails: result,
playerId: req.params.playerId
})
});
};
我的 ejs 模板:
<tbody>
<!-- since both the _id are objects their memory address are unique, I had to convert it to string to compare-->
<% for(let i= 0; i < playerDetails.players.length; i++) {%>
<%if(JSON.stringify(playerDetails.players[i]._id) === JSON.stringify(playerId)){%>
<tr>
<td><%=playerDetails.players[i].playerName%></td>
<td><%=playerDetails.players[i].age%></td>
<td><%=playerDetails.players[i].jerseyNum%></td>
</tr>
<% } %>
<% } %>
</tbody>
所以我所做的是在我的 getPlayer
控制器函数中传入一个名为 playerId
的单独密钥,该函数将在 playerDetails.ejs
中接收。我通过了它,以便我可以检查与单个玩家匹配的确切 ID。
我做得不好的主要是将对象转换为字符串。由于对象具有不同的内存地址,它们永远不会彼此相等,因此,不会在页面上显示任何内容。
这就是为什么我使用 JSON.stringify()
将 ._id
转换为字符串的原因。
//GET /teams/:id/players/:playerId --> single team --> getting single player
module.exports.getPlayer = (req, res, next) => {
TeamModel.findOne({ _id: req.params.id }, (err, result) => {
console.log('Result: ' + result.players);
// let player = _.where(result.players, { id: req.params.playerId })
res.render('playerDetails', {
title: 'Player Details',
playerDetails: result
})
})
};
因为 req.params.id 在 /player/:playerId 之前为我提供了 id 我想要一些可以帮助我获得 id 并最终以 :playerId
结尾的东西我想传递我的 'playerDetails' 文件。
<td>
<%=playerDetails.players[1].playerName%>
</td>
上面是我的 ejs 文件中的代码,它是一个硬编码值,用于生成玩家名称。
但我只是不知道如何从我的 getPlayer 控制器传递特定的 :playerId,这样我就不必硬编码值来在我的 ejs 文件中列出玩家名称。
我该怎么办? 谢谢
我的控制器功能:
//GET /teams/:id/players/:playerId --> single team --> getting single player
module.exports.getPlayer = (req, res, next) => {
TeamModel.findOne({ _id: req.params.id }, (err, result) => {
res.render('playerDetails', {
title: 'Player Detail',
playerDetails: result,
playerId: req.params.playerId
})
});
};
我的 ejs 模板:
<tbody>
<!-- since both the _id are objects their memory address are unique, I had to convert it to string to compare-->
<% for(let i= 0; i < playerDetails.players.length; i++) {%>
<%if(JSON.stringify(playerDetails.players[i]._id) === JSON.stringify(playerId)){%>
<tr>
<td><%=playerDetails.players[i].playerName%></td>
<td><%=playerDetails.players[i].age%></td>
<td><%=playerDetails.players[i].jerseyNum%></td>
</tr>
<% } %>
<% } %>
</tbody>
所以我所做的是在我的 getPlayer
控制器函数中传入一个名为 playerId
的单独密钥,该函数将在 playerDetails.ejs
中接收。我通过了它,以便我可以检查与单个玩家匹配的确切 ID。
我做得不好的主要是将对象转换为字符串。由于对象具有不同的内存地址,它们永远不会彼此相等,因此,不会在页面上显示任何内容。
这就是为什么我使用 JSON.stringify()
将 ._id
转换为字符串的原因。