我正在尝试通过AJAX调用在MongoDB数据库中进行搜索。
数据是具有开始和结束日期时间以及字符串描述的事件。
我遇到的问题是,nodejs路由器似乎没有收到ajax调用中发送的条件。
代码如下:
猫鼬模型
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({})。
欢迎任何帮助!
答案 0 :(得分:0)
这是一个很好的例子,说明荒谬的错误会使您损失数小时的编码!
我发布的代码中有两个错误:
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访问数据。
希望这些信息对其他人有帮助...