2 votes

Le moteur d'affichage express ne reconnaît pas les données envoyées au front-end

Je suis en train de créer un site web et j'essaie de mettre en place une option de révision. J'interroge les évaluations à partir de ma base de données Mysql et j'envoie les données au fichier ".pug". Les données ne s'affichent pas. Cependant, elles s'affichent si je tape les données manuellement, comme par exemple

{review: "this is a review"}

Cela fonctionne très bien, mais lorsque j'essaie d'accéder directement aux données, cela ne fonctionne pas.

var review;   
app.get('/', function(req,res) {
con.query("SELECT * FROM reviews.eatingReviews", function(err, rows) {
    review = rows[0].Review;
    console.log(review)
    if (err) throw err;
});
res.render('test',
    {review: review});

dossier du carlin

   extends layout
   block content
      p= review

Données

 RowDataPacket {
 Name: 'James Laskey',
 Email: 'james.laskey23@gmail.com',
 Review: 'This book is classic!',
 Rating: 5 }

Je dois faire en sorte que cette information soit reconnue par le html. Elle est toujours affichée comme indéfinie. J'ai essayé JSON.parse sur l'objet et cela n'a pas fonctionné non plus. Avez-vous une idée de la façon de contourner ce problème ?

1voto

bhoo-day Points 315

La vue est vide car res.render est exécuté avant con.query finir d'extraire vos données de la base de données. con.query est une fonction asynchrone.

Comme solution de contournement, vous devez mettre res.render à l'intérieur de con.query :

con.query("SELECT * FROM reviews.eatingReviews", function(err, rows) {
    review = rows[0].Review;
    console.log(review)
    if (err) throw err;

    res.render('test',
      {review: review});
});

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