Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

Je récupère les informations de la base de données lorsque j'arrive sur la route "/" et je les envoie à la vue sous forme d'objet JSON.
Info : le console.log(JSON.stringify(rows)) me renvoie (par exemple lorque je n'ai qu'un seul enregistrement)

[{"id":4,"title":"First post","content":"content"}]

router.get('/', (req, res) => {
    db.query('SELECT * FROM posts', (err, rows) => {
        if(err) {
            throw err
        }

        console.log(JSON.stringify(rows))

        res.render('home', {
            title: 'Posts !',
            results: JSON.stringify(rows)
        })
    })
})

Je parse les données envoyées pour les affichés

    - if(results !== null)
        JSON.parse(results)
            each row in results
                .panel.panel-primary
                    .panel-heading
                        h3 #{row.title}
                    .panel-body
                        p #{row.content}
    - else
        .alert.alert-info
            p There are no posts

Ce que je veux

Je veux pouvoir afficher tous les résultats un par un peu en étant bien organisés.

Ce que j'obtiens

Screen

Les box s'affichent bien mais sont vides et il en a bien une centaine (je vais pas m'amuser à toutes les compter) alors que dans la base de données il n'y a qu'une seule entrée.

Si vous pouvez m'aider à enfin comprendre l'utilisation d'une base de données avec express ce serait sympa de votre part.
Merci de votre aide.

2 réponses


Pandazaur
Réponse acceptée

Salut,

Alors je ne connais pas ton moteur de template mais je pense pas que l'erreur vienne de là.

Lorsque tu fais ça:

res.render('home', {
            title: 'Posts !',
            results: JSON.stringify(rows)
        })

la propriété results est une chaine de caractère et non pas un tableau: du coup tu itère non pas sur tes éléments mais sur les caractères. Du coup ton moteur de template ne trouve pas les propriété id, title, etc ...
Je pense que tu devrais simplement mettre:

res.render('home', {
            title: 'Posts !',
            results: rows
        })
PaxTiz
Auteur

Salut,

Le moteur de template est Pug, qui est le remplacant de Jade (http://pujs.org).

J'ai résolu le problème en remplacant

results: JSON.stringify(rows) 

par

results: rows 

comme tu l'as dit mais il m'a aussi fallu enlever le parse JSON dans la vue et modifier l'itération.
Merci pour ton aide, je vais enfin pouvoir réussir à utiliser mysql correctement avec express :).