IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

NodeJS Discussion :

ExpressJS - Renvoyer un tableau d'objets en réponse d'une requête


Sujet :

NodeJS

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    juin 2015
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : juin 2015
    Messages : 185
    Points : 54
    Points
    54
    Par défaut ExpressJS - Renvoyer un tableau d'objets en réponse d'une requête
    Bonjour à tous !
    Je viens vers vous aujourd'hui car je lutte sur un problème dont l'origine m'échappe.

    Sur la partie back-end d'un projet, j'ai un controller qui est sensé interroger la base de données et renvoyer tous les posts qui y sont présents. Or je récupère bien les données mais impossible de les envoye au front-end...

    Voici mon controller :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    exports.getAllPosts = async (req, res, next) => {
        const posts = await prisma.posts.findMany({
            orderBy: {
                date: 'asc'
            }
        }).then((data) => {
            console.log(data); // On obtient bien data (qui est un array d'objets, chaque objet étant un post) dans le bash
            res.status(200).json(data); // Lorsque j'utilise cette ligne, ça génère une erreur qui est catchée juste après avec le status 403 et l'erreur retournée est un objet vide donc difficile de savoir ce qui cloche
            res.status(200).json({message : 'Pourquoi j\'arrive à envoyer ce message mais pas les data...'}); // Lorsque j'utilise cette ligne la requête réussie et je récupère bien le message.
        }).catch(e => res.status(403).json({e}));
    }
    Sauriez-vous pourquoi je n'arrive pas à envoyer "data" au front-end ?
    Je vous remercie d'avance !

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    juin 2003
    Messages
    10 039
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2003
    Messages : 10 039
    Points : 15 248
    Points
    15 248
    Par défaut
    d'après la documentation les données sont converties avec JSON.stringify() :
    https://expressjs.com/en/4x/api.html#res.json
    essayez de lancer cette conversion pour voir si une exception est lancée.

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    juin 2015
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : juin 2015
    Messages : 185
    Points : 54
    Points
    54
    Par défaut
    Si j'ajoute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const donnees = JSON.stringify(data);
    après la ligne 7 et rien de plus, ça me génère une exception qui est catchée de la même façon que précédemment.

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    juin 2015
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : juin 2015
    Messages : 185
    Points : 54
    Points
    54
    Par défaut
    Juste pour info (au cas où), les données que je reçois dans le bash sont celles-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    [
      {
        postId: 3,
        authorId: 2,
        textContent: 'Troisième post créé sur Prisma Studio',
        imgContent: null,
        date: 1634829325104n
      },
      {
        postId: 2,
        authorId: 1,
        textContent: 'Second post crée sur Prisma Studio',
        imgContent: null,
        date: 1644729325104n
      },
      {
        postId: 1,
        authorId: 1,
        textContent: 'Post crée sur Prisma Studio',
        imgContent: 'http://thispersondoesnotexist.com/',
        date: 1644829325104n
      }
    ]

  5. #5
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    juin 2003
    Messages
    10 039
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2003
    Messages : 10 039
    Points : 15 248
    Points
    15 248
    Par défaut
    le problème vient des dates, le type bigint ne peux pas être converti en json avec "JSON.stringify()".

    mais avant de régler cela, il faudrait peut-être voir le souci de débugage. vous devriez voir le message d'erreur sinon vous aurez de nouveau le souci dans la suite du développement.
    essayez de mettre console.log(e); dans la partie "catch" pour voir si cela vous affiche plus d'informations.

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    juin 2015
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : juin 2015
    Messages : 185
    Points : 54
    Points
    54
    Par défaut
    Effectivement le console.log a été très utile et a confirmé ce que tu m'as dit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    TypeError: Do not know how to serialize a BigInt
         at JSON.stringify (<anonymous>)
         ...
    Et donc du coup il est possible de faire une conversion de BigInt en Int avant d'envoyer la réponse ?
    Parce que, sauf erreur de ma part, un int en sql ne peut comporter que 10 chiffres alors qu'un int en JS n'a pas cette limite. Je me trompe ?

  7. #7
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    janvier 2011
    Messages
    16 703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : janvier 2011
    Messages : 16 703
    Points : 43 258
    Points
    43 258
    Par défaut
    Bonjour,
    Et donc du coup il est possible de faire une conversion de BigInt en Int avant d'envoyer la réponse ?
    tu peux faire la conversion lors du « stringify » en utilisant la fonction de remplacement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    const donnees = JSON.stringify(data, function(key, value) {
      return key === "date" ? Number(value) : value;
    });

  8. #8
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    juin 2015
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : juin 2015
    Messages : 185
    Points : 54
    Points
    54
    Par défaut
    Merci beaucoup, je vais tester tout de suite !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/01/2007, 17h28
  2. [AJAX] Réponse d'une requête xmlhttp
    Par odissey dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 06/09/2006, 12h01
  3. Mauvaise réponse d'une requête avec mysql_fetch_row
    Par psychoBob dans le forum Requêtes
    Réponses: 14
    Dernier message: 20/06/2006, 12h26
  4. Analyse de code HTML en réponse a une requête post.
    Par ghost942 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 04/06/2005, 21h40
  5. [VB6] [Syntaxe] Fonction renvoyant un tableau d'objets
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 18/10/2002, 15h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo