Поиск MongoDB из вызова AJAX с NodeJS - PullRequest
0 голосов
/ 19 мая 2019

Я пытаюсь выполнить поиск в базе данных MongoDB по вызову AJAX.

Данные - это события с начальным и конечным датами TimeTime и описанием String.

Проблема Iесть то, что маршрутизатор nodejs, кажется, не получает критерии, отправленные в вызове ajax.

Вот код:

Модель Mongoose

const eventSchema = new mongoose.Schema({
   description: {
      type: String,
      require: true,
      default: ""
      },
   beginDate: {
      type: Date,
      required: true,
      default: Date.now
   },
   endDate: {
      type: Date,
      required: true,
      default: Date.now
   }
})

Вызов Ajax

function showEvent(dateValue) {
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      var valResponse = JSON.parse(this.responseText)
      var eventStart = new Date(valResponse.beginDate)
      var eventEnd = new Date(valResponse.endDate)
      document.getElementById("eventFrom").innerHTML = datetimeToText(eventStart)
      document.getElementById("eventTo").innerHTML = datetimeToText(eventEnd)
      document.getElementById("eventDesc").innerHTML = valResponse.description
    }
  };

  xhttp.open("POST", "/getevent", true);
  xhttp.setRequestHeader("Content-Type", "application/json;");
  xhttp.send(JSON.stringify({ 'beginDate': { '$gte': '2019-05-23T00:00:00.000Z' }, 'endDate': { '$lte': '2019-05-23T23:59:59.000Z' } }))
}

NodeJS router

const express = require("express")
const router = new express.Router()

const Event = require("../models/eventsModel")

router.post("/getevent", async (req, res) => {
  try {
    Event.find(req.body).exec((err, result) => {
      res.status(200).send(result)
    })
  } catch (e) {
    console.log(e)
    res.status(400).send(e)
  }
})

module.exports = router

Теперь, если я добавляю console.log (req.body) в маршрутизатор, он возвращает только пустой JSON ({}).

Любая помощь приветствуется!

1 Ответ

0 голосов
/ 20 мая 2019

Это хороший пример того, как из-за нелепых ошибок вы можете потерять часы кодирования!

В коде, который я разместил, есть две ошибки:

1- В строке xhttp.setRequestHeader ("Content-Type", "application / json;");точка с запятой внутри цитаты не должна быть там.Таким образом, правильная строка: xhttp.setRequestHeader («Content-Type», «application / json»);

2 - отправленные данные имеют неправильный формат:

Вместо «beginDate»:{'$ gte': '2019-05-23T00: 00: 00.000Z'} должно быть beginDate: {gte: '2019-05-23T00: 00: 00.000Z'}

Наличие «beginDate»и "gte" внутри кавычек мешает nodejs обрабатывать их как идентификаторы.То же самое за $ перед gte.С этими цитатами невозможно получить доступ к данным с помощью req.body.beginDate.

Надеюсь, информация поможет другим народам ...

...