#node.js #ajax #express #mongoose #handlebars.js
#node.js #ajax #экспресс #мангуст #handlebars.js
Вопрос:
Это схема комментариев в MongoDB::
var commentSchema = new mongoose.Schema({
ClientId: {
type: String,
unique: true
},
AddtasksMain : [{
AddtasksId: String,
comments: [
{
username: String,
comment: String
}
]
}]
});
module.exports = mongoose.model('Comments', commentSchema);
Это реальные данные, хранящиеся в MongoDB:
{
"_id" : ObjectId("5f6f575bc747922658b976db"),
"ClientId" : "5f6f575bc747922658b976da",
"AddtasksMain" : [
{
"AddtasksId" : "gj1zeatygqy$s",
"_id" : ObjectId("5f6f580fc747922658b976e3"),
"comments" : [
{
"comment" : "This is my first comment.",
"username" : "Vicky Kumar",
"_id" : ObjectId("5f6f582fc747922658b976e7")
},
{
"comment" : "This is my second comment.",
"username" : "Vicky Kumar",
"_id" : ObjectId("5f6f5840c747922658b976e8")
},
{
"comment" : "This is my third comment!",
"username" : "Vicky Kumar",
"_id" : ObjectId("5f6f584dc747922658b976e9")
},
{
"comment" : "This is my 4th comment.",
"username" : "Vicky Kumar",
"_id" : ObjectId("5f6f588bc747922658b976ea")
},
{
"comment" : "This is my 5th comment.",
"username" : "Vicky Kumar",
"_id" : ObjectId("5f6f5891c747922658b976eb")
}
]
}
],
"__v" : 0
}
Это мой вызов AJAX:
$.ajax({
type: "GET",
url: "/getComments",
dataType: "json",
data: {
username: username,
ClientId : ClientId,
AddtasksId: AddtasksId
},
contentType: "application/json",
success: function(response){
if (response.status == '200') {
location.reload();
}
}
});
Это мой код маршрута:
router.route("/getComments").get(function(req, res) {
Comments.findOne({ClientId: req.query.ClientId}, function(err, dataComments) {
dataComments.AddtasksMain.forEach(element => {
if(element.AddtasksId == req.query.AddtasksId)
{
// res.end('{"success" : "Comments uploaded succesfully", "status" : 200, "CommentData":element}');
}
})
})
})
Код работает. Но я не могу понять, как отправить ответ обратно AJAX
в handlebar с массивом объектов, а затем получить к ним доступ в handlebar, добавив эти данные комментариев к разделам.
Итак, вот чего я хочу: все comments's array objects
, что должно быть отправлено в виде ответа обратно AJAX
в случае успеха. Означает, что мне нужно отправить элемент here обратно на страницу handlebar в качестве ответа AJAX
. Итак, я подумал, может быть, я смогу добиться этого с res.end(), res.json()
помощью или, может быть, с res.send()
помощью . Я не знаю? Как этого добиться, пожалуйста?
Это приведенный выше код, который я пробовал.
Ответ №1:
Перед отправкой ответа обратно клиенту используйте Array.map, чтобы отфильтровать ваши комментарии. Это даст вам новый массив. И тогда вы можете использовать res.json(newArray)
.
Ответ №2:
Вы можете использовать JSON.stringify()
, например:
res.setHeader('Content-Type', 'application/json');
res.send(JSON.stringify(yourArray));