Как написать статический метод в Mongoose, который получает все документы? - PullRequest
0 голосов
/ 15 декабря 2018

Я новичок в мангусте.Я написал метод статики и метод экземпляра для схемы Mongoose под названием 'questionSchema' и экспортировал его так:

var questionSchema = new Schema({
    ...
})

questionSchema.methods.createQuestion = function(){
    return this.save(function(err){
        if(err){ 
            return  err
        };
        return 'Saved the question';
    });
};

questionSchema.statics.getAllQ = function(){
    return this.find({}, function(err, res){
        if(err){ 
            return  err
        };
        return res;
    });
}

module.exports = mongoose.model('Question', questionSchema)

Затем на маршруте на моем сервере Node / Express я импортировал его как модельи попытался вызвать статический метод, который должен вернуть все документы в модели Question:

const Question = require('../models/question.js');

...

router.post('/qcrud/submit', (req, res) => {
    let reqBody = req.body;

    var newQuestion = new Question({reqBody});    
    newQuestion.createQuestion();
})

router.get('/qcrud/getAll',(req, res) => {
    let qArr = Question.getAllQ()
    res.send(qArr);
});

Однако он возвращает объект Query, а не массив, как я ожидал.Я оглянулся и увидел в MDN, что

'Если вы не укажете обратный вызов, API вернет переменную типа Query.'

Я указалобратный вызов, но все еще получил объект Query.Прежде всего, правильно ли я использую методы static и instance?Документы даже сохраняются?И как мне получить доступ к массиву сохраненных документов?

1 Ответ

0 голосов
/ 15 декабря 2018

Если вы используете Node 8.x, вы можете использовать async / await

Таким образом, ваш код будет выглядеть более синхронно:

questionSchema.statics.getAllQ = async () => {
    return await this.find({});
}

router.get('/qcrud/getAll',async (req, res) => {
    let qArr = await Question.getAllQ();
    res.send(qArr);
});

Вы можетенайдите действительно хорошую статью, которая объясняет, как использовать Mongoose с async / await здесь .

...