8 - Landre Jerome
Transcription
8 - Landre Jerome
M41B2 Technologies Javascript AngularJS / NodeJS TD 8 Jérôme Landré – jerome.landre@univ-reims.fr bureau C203 (GMP) DUT Métiers du Multimédia et de l'Internet I.U.T. de Troyes Université de Reims Champagne-Ardenne Plan I- MEAN II- Interactions MySQL/Node.js III- Interactions AngularJS/Node.js IV- Application aux footballeurs 2 I- MEAN 3 MEAN ● ● ● MEAN signifie MongoDB, Express, Angular, Node.js C'est un ensemble d'outils très performants et à la mode pour développer des applications Web Quelques sites intéressants (parmi d'autres) : http://meanjs.org, http://mean.io ● (On peut remplacer MongoDB par MySQL) 4 II- Interactions MySQL/Node.js 5 Interactions MySQL/Node.js ● ● Node.js est capable de communiquer avec une base MySQL grâce au module 'sql' On part de la base de données des enseignants : 6 mean.js var express = require("express"); var mysql = require("mysql"); mean.js var app = express(); var connexion = mysql.createConnection({ host : "localhost", user : "root", password : "", database : "testnode" }); connexion.connect(function(error){ if(error) { console.log("Problème avec MySQL : "+error); } else { console.log("Connexion avec la base OK..."); } }); ... 7 mean.js mean.js app.get('/', function(req, res) { res.end('<p>Bienvenue !</p>'); }); /* Lancement de la requête et récupération des données en JSON */ app.get('/charge',function(req, res){ connexion.query("SELECT * FROM personnes", function(error,rows){ if (error) { console.log("Problème avec MySQL : "+error); connexion.end(); } else { res.end(JSON.stringify(rows)); } }); }); /* Démarre le serveur */ app.listen(3000, function(){ console.log("Serveur démarré sur le port 3000..."); }); 8 III- Interactions AngularJS/Node.js 9 enseignants.html <!doctype html> <html lang="fr" ng-app="appliEnseignants"> <head> <meta charset="utf-8" /><title>Les enseignants du département</title> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script> <script src="enseignants_module.js"></script> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body> <header> <h1>Les enseignants du département</h1></header> <div class="page"> <div class="principal"> <div ng-controller="EnseignantsController"> <p ng-repeat="enseignant in enseignants"> <span>{{enseignant.prenom}}{{enseignant.nom}}</span><br /> <span>{{enseignant.age}} ans.</span><br /> </p></div> </div></div> <footer>MMI3 - IUT de Troyes</footer> </body> </html> 10 enseignants_module.js var app=angular.module('appliEnseignants',[ ]); app.controller('EnseignantsController',['$scope', '$http', function ($scope, $http) { $http.get('http://localhost:3000/charge') .success(function(data){ $scope.enseignants=data; }); }]); 11 Problème de sécurité ● Problème de sécurité : Une demande multi-origines (Cross-Origin Request) a été bloquée : la politique « Same Origin » ne permet pas de consulter la ressource distante située sur http://localhost:3000/charge. Ceci peut être corrigé en déplaçant la ressource sur le même domaine ou en activant CORS. 12 Problème de sécurité ● Problème de sécurité : Une demande multi-origines (Cross-Origin Request) a été bloquée : la politique « Same Origin » ne permet pas de consulter la ressource distante située sur http://localhost:3000/charge. Ceci peut être corrigé en déplaçant la ressource sur le même domaine ou en activant CORS. res.setHeader('Access-Control-Allow-Origin', '*'); res.setHeader('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS, PATCH'); res.setHeader('Access-Control-Allow-Headers', 'origin, xrequested-with, content-type'); 13 Résultat final ● On obtient la lecture des données par node.js et leur affichage par AngularJS ! 14 A faire ● Tester le code proposé sur votre base de données d'enseignants du département pour obtenir : 15 IV- Application aux footballeurs 16 A faire ● Créer une base de données avec les footballeurs et leurs clubs à partir du MCD cidessous : footballeurs foot_num foot_nom foot_prenom foot_buts foot_sels clubs jouer 0:N 0:N club_num club_nom 17 A faire ● ● Créer une application node.js qui écoute sur le port 8080 et qui renvoie un JSON avec les informations des footballeurs sur une route « /affiche » Afficher les footballeurs avec AngularJS en vous inspirant de ce TD 18 Avez-vous des questions ? 19