Injecter des données dans ma vue (Express et MongoDB)

Par swagphil, il y a 9 ans


Javascript NodeJS

Bonjour,

Je suis nouveau dans l'apprentissage de NodeJs et des différents outils disponibles comme MongoDB. Je suis entrain de créer un projet et je suis à l'étape de lier une base de données MongoDB avec mon projet. J'aimerais être capable d'injecter dans ma vue HTML les différentes données qui seront dans MongoDB. Pour mon projet j'utilise Express pour le routage et les template.

Ce que je fais

Décrivez ici votre code ou ce que vous cherchez à faire

var express = require('express'); var app = express(); var server = require('http').createServer(app) var io = require('socket.io').listen(server); var device = require('express-device'); var runningPortNumber = process.env.PORT; // Drivers de Mongo var mongodb = require('mongodb'); // MongoClient var MongoClient = mongodb.MongoClient; // Connection var url = 'mongodb://localhost:27017/leportail'; MongoClient.connect(url, function (err, db) { if (err) { console.log('IMPOSSIBLE DE SE CONNECTER', err); } else { console.log('LA CONNEXION À LA BD FONCTIONNE BIEN: ', url); db.close(); } });

Ce que je veux

Donc j'aimerais pouvoir injecter mes différentes données de mes collections dans mes pages .ejs. Je ne trouve malheuresement pas de tutoriels satisfaisants sur internet donc j'aimerais obtenir votre aide afin de m'aider un peu dans mon apprentissage.

Merci :)

4 réponses

Defy, il y a 9 ans

il faut utiliser la methode render de express, tu créer une route pour rendre accessible ta page, dans ta fonction de callback, tu fais un res.render(tavue, {data:les data a envoyé}) et dans ta vue tu utilise data dans ejs pour afficher les data

swagphil, il y a 9 ans

Oui merci c'est ce que je pensais. J'ai cependant une erreur dans mon navigateur.

// Chargement notes app.get('/notes', function (req, res) { db.collection('notes').findOne({}, function(err, doc){ res.render("request handled", {title: leportail.notes}); console.log("Un visiteur demande la page des notes"); }); }); ReferenceError: db is not defined at /Users/philippesimard/Desktop/leportail/server.js:61:5 at callbacks (/Users/philippesimard/Desktop/leportail/node_modules/express/lib/router/index.js:164:37) at param (/Users/philippesimard/Desktop/leportail/node_modules/express/lib/router/index.js:138:11) at pass (/Users/philippesimard/Desktop/leportail/node_modules/express/lib/router/index.js:145:5) at Router._dispatch (/Users/philippesimard/Desktop/leportail/node_modules/express/lib/router/index.js:173:5) at Object.router (/Users/philippesimard/Desktop/leportail/node_modules/express/lib/router/index.js:33:10) at next (/Users/philippesimard/Desktop/leportail/node_modules/express/node_modules/connect/lib/proto.js:193:15) at Object.handle (/Users/philippesimard/Desktop/leportail/server.js:46:1) at next (/Users/philippesimard/Desktop/leportail/node_modules/express/node_modules/connect/lib/proto.js:193:15) at Object.handle (/Users/philippesimard/Desktop/leportail/node_modules/express-device/lib/device.js:103:26)

Je n'arrive pas encore à bien comprendre :) Merci beaucoup pour votre aide

tleb, il y a 9 ans

db n'est accessible que dans la callback de MongoClient.connect. Elle n'existe pas à l'extérieur de cette fonction.

Gros edit de ma réponse (j'ai tout supprimé, je disais rien de juste) : MongoClient.connect crée une pool de base, donc il faut que tu utilises le db que MongoClient.connect te donne dans toutes tes requêtes.

Defy, il y a 9 ans

il suffit d´utiliser mongoose comme orm mongo ca passe tous seul