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


tleb
Réponse acceptée

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.

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
Auteur

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

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