|  Vous n'êtes pas connecté.   Connexion | 
|  | 
	 					Accueil > M2 Miage NTDP et MBDS : Server Side JS, MongoDB, frameworks JS	 				 M2 Miage NTDP et MBDS : Server Side JS, MongoDB, frameworks JSDe $1Table des matières
 
 Séance 1 - présentation de NodeJS et premiers exercices simples
 Ressource : des MOOCS!
 Il y a d'excellents cours JS avancés sur udacity.com (je recommande pour ceux qui se débrouillent pas mal celui-ci: https://www.udacity.com/course/objec...ascript--ud015) Outils à installer
 TP - routage avec le module ExpressJS, Web Services RESTFULSupports de cours: transparents de présentation de Express 
 TP - MongoDB
 1 - Installer MongoDB sur votre machineSuivez les installations propres à votre système d'exploitation situées sur cette page du site officiel. Ne choisissez pas l'installation manuelle. Une fois installé lancez la commande "mongod" en ligne de commande. Si le daemon mongoDB ne se lance pas, regardez les erreurs. Sur mon Mac j'ai fait: 
 2 - Créer et peupler une collection par défaut (avec un dataset issu du tutorial MongoDB officiel)
 3 - Installer un outil d'administration sympaJe vous recommande fortement MongoChef, un produit commercial mais gratuit pour utilisation non commerciale. Le télécharger sur: https://studio3t.com/ 4 - Ouvrir 3T STudio et voir la collection que l'on vient d'importer
 Quelques screenshots: 
 
 5 - Installer le driver MongoDB pour NodeJS
 Ca doit télécharger le module driver mongodb dans un sous-répertoire  6 - Tester des requêtes CRUD avec NodeJS et express
 Ecriture d'un client de test utilisant Ajax/Fetch API et l'API des tableaux HTML5 
 A FAIRE : essayer d'ajouter un findByName et un count à l'application précédente. Corrections pour le count et pour le findByName: Voir la doc de MongoDB pour les requêtes comprenant des expressions régulières: https://docs.mongodb.com/manual/refe...r/query/regex/ Dans serverCrudWithMongo.js: // ICI c'est autorisé par la norme REST car
// "count" est un mot réservé, on ne risque pas de
// le prendre pour une TABLE ou une collection
// cf la partie "reserved words" de
// https://blog.octo.com/designer-une-api-rest/
app.get('/api/restaurants/count', function(req, res) { 
	// on renvoie le nombre de restaurants
 	mongoDBModule.countRestaurants(function(data) {
 		var objdData = {
 			msg:"Count effectué avec succès",
 			data: data
 		}
 		res.send(JSON.stringify(objdData)); 
 	});     	
});
// On va récupérer des restaurants par un GET (standard REST) 
// cette fonction d'API peut accepter des paramètres
// pagesize = nombre de restaurants par page
// page = no de la page
// Oui, on va faire de la pagination, pour afficher
// par exemple les restaurants 10 par 10
app.get('/api/restaurants', function(req, res) { 
	// Si présent on prend la valeur du param, sinon 1
    let page = parseInt(req.query.page || 0);
    // idem si present on prend la valeur, sinon 10
    let pagesize = parseInt(req.query.pagesize || 10);
    let nom = req.query.nom;
	if(nom) {
    	// find by name
	 	mongoDBModule.findRestaurantsByName(nom, page, pagesize, function(data) {
	 		var objdData = {
	 			msg:"restaurant recherchés par nom avec succès",
	 			data: data
	 		}
	 		res.send(JSON.stringify(objdData)); 
	 	}); 
    } else {
    	// find normal
	 	mongoDBModule.findRestaurants(page, pagesize, function(data) {
	 		var objdData = {
	 			msg:"restaurant recherchés avec succès",
	 			data: data
	 		}
	 		res.send(JSON.stringify(objdData)); 
	 	}); 
    }
});
Dans app_modules/crud-mongo.js: exports.countRestaurants = function(callback) {
	console.log("DANS COUNT")
	MongoClient.connect(url, function(err, db) {
		db.collection('restaurants')
		.count(function(err, res) {
			console.log("COUNT = " + res)
			callback(res);
		});
	});
};
exports.findRestaurantsByName = function(nom,page, pagesize, callback) {
    MongoClient.connect(url, function(err, db) {
    	    console.log("pagesize = " + pagesize);
    	    console.log("page = " + page);
    console.log("FIND BY NAME nom=" + nom);
    	// syntaxe recommandée
    	// Cf doc mongodb: https://docs.mongodb.com/manual/reference/operator/query/regex/
    	// The $regex value needs to be either the string 
    	// pattern to match or a regular expression object. 
    	// When passing a string pattern, you don't include 
    	// the / delimitters
    	// VERSION avec $regexp et $options
    	let myquery = {
    		"name": {
    			$regex: ".*" + nom + ".*", 
    			$options:"i"
    		}
    	}
    	// VERSION avec objet RegExp
    	//let myquery =  {'name' : new RegExp('^.*'+nom+'.*$',"i")};
    	// ou, si on veut être "case sensitive"  
    	//let myquery =  {'name' : new RegExp('^.*'+nom+'.*$')};
        if(!err){
            db.collection('restaurants')
            .find(myquery)
            .skip(page*pagesize)
            .limit(pagesize)
            .toArray()
            .then(arr => callback(arr));
        }
        else{
            callback(-1);
        }
    });
};
 Séance 3: rappels JavaScript objet et asyncrhone, introduction aux frameworksLes classes ou pseudo classes en JavaScript
 Ressources pour l'héritage :
 
 Introduction aux frameworksUne todolist en différentes versions JS/jQuery/VueJS/VueJS + fetch API:
 
 Introduction à ReactJSA faire avant le TP:
 A faire pour la séance de vendredi :
 
				 				Mots clés:
			 					 | 
| Powered by MindTouch Deki Open Source Edition v.8.08 |