Итак, я работал над MongoDB с mongoose
, и у меня есть следующий код, который будет включен с var tdb = require('./db.js');
// ./db.js
module.exports = {
update: function(data) {
post.findOne({slug:data.slug}, (err, res) => {
if(err) {
post.create(data, (err, res) => {})
} else {
post.updateOne({slug:data.slug}, data, (err, res) => {})
}
})
},
search: function(ftype, fval, fkey) {
var query = {};
if(ftype != "all") {
query[ftype] = fval;
}
post.find(query).lean().exec((err, res) => {
var keys = Object.keys(res);
var index = keys.indexOf(fkey);
var rdata = res[fkey];
rdata.next = res[keys[index + 1]];
rdata.prev = res[keys[index - 1]];
return rdata;
})
}
}
(код также имеет другую часть, ноЯ сосредотачиваюсь на search
функции)
Который затем я пытаюсь вызвать console.log(tdb.search("all", "none", "2"));
, но он выдает undefined
.Но если я добавлю console.log(rdata)
над строкой возврата, он выдаст правильный ответ, в то время как код console.log(tdb.search("all", "none", "2"));
все еще возвращает undefined
.
Я понятия не имею, почему.Я подумал об одной вероятной проблеме, заключающейся в том, что порядок обработки неверен, что произошло с fs
и исправлено с помощью обещания.Но я не думаю, что это так, так как я возвращаю значение в обратном вызове post.find()
, чем я полностью застрял.Не знаете, где другие могут пойти не так?