Невозможно вызвать Mon goose Stati c Метод: Ошибка findByCredential не является функцией - PullRequest
0 голосов
/ 08 января 2020

Я определил PatientSchema и метод findByCredentials Stati c для этой схемы, как показано ниже:

const Patient = mongoose.model('Patient', PatientSchema )
PatientSchema.statics.findByCredentials = async function(patientId,password) {

    const patient = await Patient.findOne({patientId})

    if(!patient) {
        throw new Error ('No Such Patient Exists')
    }

    if(password !== patient.password) {
        throw new Error ('Incorrect Password !')
    } else {
        return patient
    }

}


module.exports = {Patient}

Теперь, когда я пытаюсь получить к нему доступ через свой контроллер входа в систему, я получаю сообщение об ошибке: Patient.findByCredentials не является функцией. Вот мой код контроллера:

const {Patient} = require('../../models/Patient.model')


router.post('/', async (req,res)=>{

    if(req.body.userType === 'Patient') {
        const patient = await Patient.findByCredentials(req.body.id, req.body.password)
        const token = await patient.generateAuthToken()
        res.send({patient, token})
    } 
}) 

module.exports = router

Я вызываю метод из модели, а не из экземпляра, но я получаю эту ошибку: (

1 Ответ

0 голосов
/ 08 января 2020

Вы должны объявить модель после назначения метода stati c:

PatientSchema.statics.findByCredentials = async function(patientId,password) {

    const patient = await Patient.findOne({patientId})

    if(!patient) {
        throw new Error ('No Such Patient Exists')
    }

    if(password !== patient.password) {
        throw new Error ('Incorrect Password !')
    } else {
        return patient
    }

}

const Patient = mongoose.model('Patient', PatientSchema )
module.exports = {Patient}
...