В настоящее время я создаю приложение, в котором мне нужно сохранить массив тегов в MongoDB, используя express js в Node Js.
Вот метод, который я использовал для сохранения своих тегов в виде массива в 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>
<%}%>
Я надеюсь, что ничего не упускаю.
Как разделить результаты вместо того, чтобы отображать их через запятую?
Спасибо!



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я нашла ваш вопрос на 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]; теги_массив = теги_массив.split (',');
Я нашел решение из вашего предыдущего решения. Огромное спасибо.
но в чем была проблема? это были данные или шаблон?
Данные. Я ценю вашу помощь.
Лучшее, что я могу предложить, - это добавить к вопросу точное значение JSON.stringify (result.map (t => t.tags)), это может помочь. Если бы я был на вашем месте (случается каждый день), я бы прошел через это с помощью отладчика, чтобы найти проблему.