【发布时间】:2016-11-11 02:43:25
【问题描述】:
如果我将 dateString 参数作为参数,我会收到来自 Mongoose FindOne 的空响应。我正在使用 nodejs 和猫鼬。
这是我的代码:
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 或有专业人员来完成工作。服务器正在毫无问题地保存服务,但我需要检查刚刚保存的服务的状态,当我输入 dateOpen: dateString 时,我面临着 Service.findOne() 返回空值的问题。
问题是
Service.findOne({
tipo: req.body.service[0].tipo,
client: user._doc._id,
dateOpen: dateString
}
总是返回空值,例如服务不存在。但是,如果我使用 mongo 在提示符下进行相同的查询,我得到了正确的服务。
我做了一些测试并观察到一些事情:
- console.logs 正在打印它应该打印的内容。
-当我从 Service.findOne() 中的参数中删除 dateOpen: dateString 时,它可以工作
所以,我认为错误与 dateString 有关,但我看不到它是什么。
希望有人可以帮助我,
提前谢谢你!
【问题讨论】:
-
您将日期保存为字符串。检查它们的格式是否相同。否则,它不会返回所需的结果。我建议将日期保存为日期类型。然后你可以直接在查询中使用 Date() 对象来查找结果。
-
是的,看看你的文件,以及你的 console.log(dateString) 的结果。随时在您的问题中发布示例。
-
谢谢各位,刚刚解决了。格式是一样的。
标签: javascript node.js mongodb mongoose