如果我将参数设为dateString参数,我将从Mongoose FindOne获得null响应。我正在使用nodejs和mongoose。
这是我的代码:
var Service = app.models.service;
controller.newService = function(req, res) {
var date = new Date();
var dateString = date.toString();
var countHours = 1;
var user = req.decoded;
var findProfessional = function(){
console.log(countHours);
console.log(user._doc._id);
console.log(req.body.service[0].tipo);
console.log(dateString);
Service.findOne({
tipo: req.body.service[0].tipo,
client: user._doc._id,
dateOpen: dateString
}, function(err, service) {
console.log(service);
if (err) throw err;
if (!service) {
console.log("service not found");
} else if (service) {
if (service.status == 'open' && countHours <= 24) {
setTimeout(function(){
Professional.find({
'services.name': req.body.service[0].tipo
}, function(err, professional) {
if (err) throw err;
if (professional) {
DO STUFF
} else {
DO STUFF
res.json({ success: false, message: 'No professionals found' });
};
});
countHours++;
findProfessional();
}, 10000);
} else if (service.status != 'open'){
// DO STUFF
} else if (countHours > 24){
//DO STUFF
}
}
});
};
这是我的架构:
var schemaServices = mongoose.Schema({
tipo: {
type: String,
required: true
},
client: {
type: String,
required: true
},
dateOpen: {
type: String,
required: true
},
dateClose: {
type: String,
},
professional: {
type: String
},
status: {
type: String,
required: true
},
services: {
type: [{name: String,
preco: String,
tipo: String,
tipoCusto: String,
pedido: String}],
required: true
},
visitDay: {
type: String
},
visitHour: {
type: String
},
address: {
type: [{cep: String,
street: String,
number: String,
comp: String,
district: String,
city: String}],
required: true
}
});
schemaServices.index({client: 1, tipo: 1, dateOpen: 1}, {unique: true});
我的代码是做什么用的?
当对此路线发出请求时,节点会保存新服务并寻找专业人员来完成这项工作。它一直在寻找,直到计时器countHours达到24或有专业人员来完成工作。服务器正在保存服务没有问题,但我需要检查刚刚保存的服务的状态,并且我遇到Service.findOne()的问题,当我输入dateOpen:dateString时返回空值。
问题是
Service.findOne({
tipo: req.body.service[0].tipo,
client: user._doc._id,
dateOpen: dateString
}
总是返回一个null值,就像服务不存在一样。但是如果我使用mongo在提示中进行相同的查询,我得到了正确的服务。
我做了一些测试并观察了一些事情:
- console.logs正在打印它应该打印的内容 - 当我从Service.findOne()中的参数中删除dateOpen:dateString时,它可以正常工作
所以,我认为错误与dateString有关,但我看不出它是什么。
希望有人可以帮助我,
提前谢谢!
答案 0 :(得分:0)
刚刚解决了我自己的问题。
问题是节点的执行时间比mongo的.save方法快,只是将findProfessional()的调用改为.save方法的成功回调。像那样:
newService.save(function(err){
if (err) throw err;
console.log('Service saved successfully');
newService.save(findProfessional())
});
现在,它正常工作。