使用Nodejs搜索Ajax调用的mongoDB



我正在尝试通过ajax呼叫进行搜索。

数据是具有开始和结束日期和字符串描述的事件。

我遇到的问题是,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路由器

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-在行xhttp.setrequestheader上(" content-type"," application/json;"(;报价中的分号不应该在那里。因此,正确的行是xhttp.setRequestheader(" content-type"," application/json"(;

2-发送的数据格式不佳:

而不是" Begindate":{'$ GTE':'2019-05-23T00:00:00.000Z'}必须开始:{gte:'2019-05-23T00:00:00.000z'}

在"启动"one_answers" gte"中引号阻止了nodejs作为标识符处理。GTE面前的$也是如此。有了这些引号,不可能使用req.body.begindate访问数据。

希望这些信息能够帮助其他人...

最新更新