I am fairly new in NodeJS, and I am trying to build an event management system where the user can see events that are happening now, upcoming events and past events. I have built a model called events which has attributes startDate and endDate which a user selects upon creation of an event. I need to list events that are happening in the present, this is the function I have built so far, however, it doesn’t work and I am pretty sure there is some mistakes in the syntax too. I would really appreciate anyone’s help on this 🙂
exports.listPresent = async (req, res) => { try { const event = await Event.find({}) const eventPresent = []; for (let i = 0; i < event.length; i++) { var dateArr = event[i].startDate.toString().split("-"); var dateArr2 = event[i].endDate.toString().split("-"); var inputDate = new Date('"' + dateArr[2] + "-" + dateArr[1] + "-" + dateArr[0] + '"').setHours(0, 0, 0, 0); var inputDate2 = new Date('"' + dateArr2[2] + "-" + dateArr2[1] + "-" + dateArr2[0] + '"').setHours(0, 0, 0, 0); var toDay = new Date().setHours(0, 0, 0, 0); if (event[i].startDate != null && event[i].startDate != '' && event[i].endDate !=null && event[i].endDate != '') { if(inputDate == toDay || (inputDate >= toDay && inputDate <= inputDate2)){ eventPresent.push(i); } } return eventPresent;; } } catch (error) { res.status(500).json( { error: error.message }); } };
I tried writing a function (the one above) but I am new at JavaScript and I am a bit lost on how to make this work.
Advertisement
Answer
The logic is correct in this one, you just need to replace return eventPresent
to res.status(200).json(eventPresent)
– and put this outside the for loop, and also eventPresent.push(i)
with eventPresent.push(event[i])
, as you are only pushing the index into the array, and not the actual element as such:
exports.listPresent = async (req, res) => { try { const event = await Event.find({}) const eventPresent = []; for (let i = 0; i < event.length; i++) { var dateArr = event[i].startDate.toString().split("-"); var dateArr2 = event[i].endDate.toString().split("-"); var inputDate = new Date('"' + dateArr[2] + "-" + dateArr[1] + "-" + dateArr[0] + '"').setHours(0, 0, 0, 0); var inputDate2 = new Date('"' + dateArr2[2] + "-" + dateArr2[1] + "-" + dateArr2[0] + '"').setHours(0, 0, 0, 0); var toDay = new Date().setHours(0, 0, 0, 0); if (event[i].startDate != null && event[i].startDate != '' && event[i].endDate !=null && event[i].endDate != '') { if (inputDate == toDay || (inputDate >= toDay && inputDate <= inputDate2)){ eventPresent.push(event[i]); } } } res.status(200).json(eventPresent); } catch (error) { res.status(500).json( { error: error.message }); } };
Hope this helps! 🙂