【问题标题】:How to display array in frontend using EJS in Mongodb Node js?如何在 Mongodb Node js 中使用 EJS 在前端显示数组?
【发布时间】:2018-11-12 23:09:20
【问题描述】:

我目前正在构建一个应用程序,我需要在 Node Js 中使用 express js 将一组标签保存到 MongoDB 中。

这是我用来将标签作为数组保存到 MongoDB 中的方法。

app.post('/upload', upload.single('meme'), function (req, res) {
    if (req.file) {

//upload to cloudinary. 
cloudinary.v2.uploader.upload(req.file.path, {use_filename: true, folder: 'test'},
    function(error, result) {
//get the image name
var filePath = req.file.originalname; 

//instantiate the meme schema
var newMeme = new meme(); 

newMeme.imgs = filePath; 

//get the caption form field value 
newMeme.caption = req.body.caption;  

//get the tags value from the form field. 

newMeme.tags = req.body.tags.replace(/\s/g,'').split(',');

//cloudinary url
newMeme.url = result.url

//encrypt the filepath 
newMeme.memeid = hash.unique(filePath); 


newMeme.save(function(err){

 if (err) throw err; 

}); 

res.cookie('filename',newMeme.url);

//return res.send('sucessfully uploaded');

res.redirect('meme/'+newMeme.memeid);

}); 

}else{
//throw error message
return res.send('failed to upload'); 

}

})

我的 Mongoose 架构如下所示:

var memeSchema = mongoose.Schema ({

imgs: String,       
id: Number,
memeid: String, 
favorites: Number,
url: String,  
caption: String, 
username: String,
tags: [],  
uploadDate: { type: Date, default: Date.now }
});  

保存后,我的数据库如下所示:

 "tags": [
        "Suprised",
        "Laughing"
    ], 

现在,当我想显示标签时,无法正确呈现结果。

我想要的结果是用链接环绕每个结果来显示它们,而不是用逗号。

例如:<a href="/tags/suprised"> Surprised </a> <a href="/tags/Laughing"> Surprised </a>

这是我得到的结果:<a href="/tags/Suprised,Laughing"> Surprised, Laughing </a>

我希望他们分开。

这是我显示结果的路线:

meme.find().sort(url).exec(function(err, result) { 
    //meme.find().sort({url}, function(err, result){

        if (err) throw err; 
        res.render('pages/index', {

            user: req.user, 
            pathi: result.map(i => i.memeid),
            path: result.map(u => u.url),
            caption: result.map(c => c.caption),
            tags: result.map(t => t.tags),  
            Title: 'Meme Search Engine'

        }); 

    });
})   

这是我用于显示结果的 EJS 模板:

 <% for(var i=0; i<tags.length; i++) { %>


      <a href="tags/<%= tags[i] %>"> <%= tags[i] %> </a> 


<%}%> 

我希望没有遗漏任何东西。

如何使我的结果分开而不是用逗号显示?

谢谢!

【问题讨论】:

  • 我能建议的最好的事情是将 JSON.stringify(result.map(t => t.tags)) 的确切值添加到问题中,它可能会有所帮助。如果我在你的位置(每天都发生),我会用调试器逐步解决这个问题。

标签: javascript node.js express ejs


【解决方案1】:

我在 Quora 上找到了你的问题。好吧,我会在这个字段中修改 memeSchema:

tags: [String] 

如果有帮助,请告诉我。如果没有,将标签 [i] 拆分为 ','

例如:

 <% for(var i=0; i<tags.length; i++) { 
       var tags_array = tags[i];
       tags_array = tags_array.split(',');
       for(var j = 0; j < tags_array.length; j++){%>


      <a href="tags/<%= tags_array[j] %>"> <%=  tags_array[j] %> </a> 

     <%}%> 
<%}%> 

【讨论】:

  • 当我应用您的解决方案时,它会抛出 tags[i].split is not a function 错误。 @AdolfoSolis
  • 确实,我的代码是错误的。修改: var tags_array = tags[i]; tags_array = tags_array.split(',');
  • 我已经从您之前的解决方案中找到了解决方案。非常感谢。
  • 但是问题出在哪里?是数据还是模板?
  • 数据。感谢您的帮助。
猜你喜欢
  • 2022-11-28
  • 2021-11-05
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 2021-01-06
  • 2019-10-29
  • 2013-11-30
  • 1970-01-01
相关资源
最近更新 更多