Как отправить массив объектов в качестве ответа на вызов AJAX в expressjs?

#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));