2 votes

Comment passer la réponse en haut du modèle MVC lors de la réception de undefined

Je tente de transmettre quelque chose de l'application au contrôleur, puis au modèle et ensuite le transmettre de nouveau, je descends bien dans la chaîne jusqu'aux modèles et je récupère ce que je veux renvoyer, mais ensuite mon contrôleur renvoie undefined. Je sais que je ne renvoie pas correctement la promesse mais je ne comprends pas pourquoi je ne la renvoie pas.

Controller.js

const { fetchOwnerById } = require('./models')

const handleGreeting = (demande, réponse) => {
    réponse.status(200).send({ message: 'bonjour depuis mon api'})
}

const getOwnerById = (demande, réponse) => {
    const ownerId = demande.params['id'];
        fetchOwnerById(ownerId)
        .then((owner) => {
            console.log(owner)
            réponse.status(200).send({owner: owner})
        })
    }

module.exports = { handleGreeting, getOwnerById }

models.js

const fs = require('fs/promises')

const fetchOwnerById = (ownerId) => {
    console.log(ownerId)
    fs.readFile(__dirname + `/data/owners/${ownerId}.json`, 'utf-8').then((data) => {
        console.log(data)
        return data
        // réponse.status(200).send(data)
        })
}

module.exports = { fetchOwnerById }

Je reçois TypeError: Ne peut pas lire les propriétés de undefined (lecture de 'then')

2voto

Mina Points 957

La méthode fetchOwnerById ne retourne rien, elle renvoie donc undefined, vous devez retourner une promise de données pour pouvoir appeler then.

const fs = require('fs/promises')

const fetchOwnerById = async (ownerId) => {
    console.log(ownerId)
    return await fs.readFile(__dirname + `/data/owners/${ownerId}.json`, 'utf-8')
}

module.exports = { fetchOwnerById }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X