在EJS中显示搜索到的mongodb文档的一部分



我正在尝试显示mongodb在EJS中搜索的一个搜索文档。但到目前为止,我只成功地将整个文档一次性显示为json格式。但现在我只想显示其中的一部分,而不是整个文档。但出于某种原因,当你在浏览器中预览它时,我试图只显示它的一部分,该字段将保持为空。这种情况下的字段是:";其他用户名";。为此,我使用了:nodejs、mongodb、express和EJS。

Index.js:

router.post('/searchplayer', ensureAuthenticated, function(req, res){
const {text} = req.body;
var input = text
User.findOne({charactername: text})
.then(user => {
if(user) {
const { MongoClient } = require("mongodb");
console.log('player found')
MongoClient.connect(url, function(error, db) {
if (error) throw error;
var dbo = db.db("Databasetest");
var query = { charactername: text };
dbo.collection("users").find(query).toArray(function(error, query, result) {
if (error) throw error;
var myJSON = JSON.stringify(query, null , 12)
console.log(myJSON);
res.render('playersearch',  {
user: req.user,
energy: myJSON.energy
})
console.log(energy)
db.close();
})
});
} else {
console.log("Player does not exist")
res.redirect('main')
}
})
})

这里发生的情况是,有人通过键入名称进行搜索,一旦在MongoDB中的集合"中找到它;用户";它会将您重定向到另一个页面。它应该在哪里显示属于搜索的名称的信息。但问题是,我无法在EJS中显示一个字段,因此为了澄清myJSON是MongoDB找到的整个字符串文档。

在这种情况下,我试图显示能量场,因为它存在于该文档中,但这只会在";其他用户名";领域我还尝试在字段中写入,例如:myJSON.energy,但当我在浏览器中预览时,由于某种原因,这也会返回一个空字段。

playersearch.ejs:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title></title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="/static/CSS/styleofplayersearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" href="">
</head>
<body>
<title>test</title>
<img id= "backgroundimage"  draggable="false" src="/static/images/post_apocalyptic_landscape.jpg">  
<div id= "blackbackground"  draggable="false"></div>  
<h4 id="otherusername"><%=energy%></h4> 



<script>
</script>


<a id="logouttext" href="/users/logout">Logout</a> 
</body>
</html>

我的问题是,如何只呈现Mongodb找到的文档的一部分,而不是整个文档?

您所经历的根本原因是您正在创建一个字符串(JSON.stringfy的输出(,然后试图访问;能量";未定义的字符串的属性。您将该未定义的值包含在传递给EJS模板的内容中,然后尝试渲染它,这将导致EJS渲染为未定义的,从而不会出现任何内容。您的EJS代码看起来不错,只是您没有向模板发送正确的数据。

您可以传递对象本身,而不是从MongoDB序列化整个匹配的文档,并在渲染时将该字符串传递给EJS模板。渲染系统可以处理这个问题。然后,在EJS文件中,使用点表示法只访问要渲染的属性。您应该使用这种技术来呈现";能量";属性。

一个好的做法是只将需要呈现的数据传递给模板系统,尤其是在涉及敏感数据的情况下。因此,在该示例中,您将在调用render时仅将能量属性传递给模板系统。

最新更新