NodeJS masterclass level 101 SkillsValue
Merci à Benoit Fillon pour cette MasterClass NodeJS .Nous commençerons par revenir sur les basics pour terminer sur un cas pratique. La source du code sera disponible surGitHub Rien à voir avec François Fillon, il n'est pas de la même famille. participe au business developpement de skill value
Agenda
Une breve histoire de NodeJS
un coup d'oeil sur l'architecture
premier pas
DEMO #1 Hello World en Node JS!
Eller plus loin avec NodeJS
Créons des APIs
Testons des APIs
Aller plus loin avec les APIS
Trucs pour garder ses projets propres
MongoDB en action
Une brève histoire de NodeJS
Ca fait une dizaine d'année que NodeJS est arrivé, depuis 2009. Le principe c'est que c'est un environnement d'execution javascript coté serveur. On sort javascript du navigateur. Avant 2009 javascript était uniquement dans le navigateur.
Dernière version de 2018: V10. Javascript s'est adapté en fonction de l'évolution des navigateurs.
depot officiel: https://github.com/nodejs/node
licence MIT
Architecture
C'est le moteur javascript de chrome V8 embarqué sur un serveur, avec un code C++. Avec un élément très important: l'event loop (single threaded) Résoud la problématique: comment mieux faire des sites webs avec un gros débit. On est dans une notion d'asynchrone, je vais séparer ce qui prend du temps de ce qui peut être traité en parallèle. C'est le principe de base.
Premier pas
Il faut installer le serveur sur Windows après l'avoir téléchargé: https://nodejs.org/en/download
C'est un .exe qui fait office de serveur
Ca vient avec NPM Node Packages Manager
npm install npm@latest -g par exemple
NPM est un outil complet
On utilise l'editeur Visual Studio Code, très pratique pour Node. Le debuggueur fonctionne très bien. On peut naviguer dans les paramètres utilisés, on peut faire des expressions évoluées, ça marche très bien.
Le faleux Hello World que l'on trouve partout:
server.js
var http=require('http');
var serveur = http.createServer(
...
server.listen(8080);
On a une fonction qui repond aux requetes qu'on va lui envoyer
On paramètre le serveur et il écoute sur un port
pour le lancer, plusieurs manières:
on prend un shell quelquonque en tapant: node serveur.js
on peut l'interroger via un navigateur et il affiche "hello world" c'est le minimum pour démarrer
Après le hello world NodeJS, faisons un serveur peu plus évolué
serverevolue.js
On ajoute le module url
var url = requiere('url');
En fonction de la requete, on redirige vers la page demandée
on renvoie du html
on retourne sur le navigateur, localhost:8080/Marseille
Hello Marseille
Voilà, on peut maintenant créer son site internet avec Node.JS!
NodeJS tout seul ne fait pas grand choses. Heureusement, iI y a des modules intéréssants à utiliser. Mean... Mern...
NodeJS, Express, on en entend parler souvent
On sépare le code de la logique métier. MVC? On va avoir un moteur de template, comme Jade ou Pug par exemple, et puis on va à la volée remplacer les paarmètres par les valeurs effectives. CF Razor sur .net etc. Tous les langages ont le même principe
NodeJS et l'API Rest
On va mettre à disposition d'autres personnes nos objets, enfin, nos applications, nos données...
Utilisation d'un routeur
Pour pouvoir séparer les logiques de routage d domaines applicatifs distincts dans plusieurs routeurs
Pour pouvoir inclure des middlewares
exemple de code: APIServerWithExpressTest.js
const express = require('express')
On a un domaine client, commande, produit, on peut mettre un routeur par domaine et séparer les requetes en les empilants dans les routes différentes.
Quand on taper par exemple urlsite/produit on va être orienté vers la page produit...
On a 2 apis qui tournent et qui renvoient vers des pages différentes
avec le fameux app.use(routeur);
Le routeur envoie un fichier .json par exemple avec la liste des clients
avec NodeJS on peut faire des tests, TDD
Un test unitaire permet de valider que le développement de la fonctionnalité demandée a été fait.
Il y a des clients qui testent, c'est vrai, tout le monde ne travaille pas dans des startups où tout est testé en live sur la production, sans tests...
L'équivalent dans le monde Java pour faire des tests c'est JUNIT
Avec chai Mocha par exemple,
var chai = require('chai');
Le test se fait avec
chai.request(app)
Avec NodeJS on peut faire du Mocking de données? Oui aussi
Postman est excellent,
Mais il n'y a pas qu'Express! Une multitude de frameworks à essayer, comme https://feathersjs.com ou Loopback soutenu par IBM, https://loopback.io/
Pour faciliter, standardiser le développement, structurer l'écriture des APIs au sein d'une équipe par exemple.
Dans Node_modules, on trouve tous les modules que l'on a rappatrié
Fichier important: package.json, qui contient les dépendances que l'on a ajouté 'Express', dans telle version, 'chai', etc.
NodeJS et la gestion des dépendances
Attention, pour la sécurité des projets, ne pas laisser des dépendances dont on ne se sert pas. Penser à les enlever quand on ne s'en sert pas limite la surface d'exposition.
C'est le grand jeu des hackers en ce moment, comme le Gang des Hackers de Montreuil qui testent les sites webs des startups. Ils poussent par exmemple une mise à jour malicieuse, ni vu ni connu, ils forcent la mise à jour. Et paf exflitration des données non chiffrées dans la base, et la startup prend une amende RGPD ;-)
NodeJS et le backend en MongoDB
Utilisation de Mlab pour avoir un petit serveur dans le cloud et une sandbox gratuite
Le package NPM Mongoose parlet de creer le shéma, définir les routes, mapper avec le modèle qui est connu par l'application
en ajoutant juste un : Mongoose.connect('mongodb://......
Quand on travaille proprement, on switch entre le backend de dev et le backend de production.
Attention, ne pas raisonner procédural et séquentiel, c'est le coté asychrone. Il faut introduire la notion de promesse: si ça c'est terminé, on fait ça.
On se conencte, ensuite, voici la fonction que l'on doit appeler seulement quand la connection est terminée.
Notre fichier routes.js renvoie les données en fonction des requetes passées en url
Avec node.JS on fait du MERN
create-react-app
Yarn/bower est un package manager pour javascript
import React,{component} from 'react' ;
On trouve le constructeur, le render() dans le app.js
On récupère les données de la route et on les met dans la variable response de React ev.setState({data:responbse.data })
test: "welcome to react"
Il y a des requetes cross domain, rajouter des headers qui permettent d'executer des requetes sur des domaines différents...
Executer des requetes vers des domaines différents?
Les bonnes pratiques pour sécuriser un serveur nodeJS
https://twitter.com/nodesecurity
@nodesecurity
Utiliser SSL bien sûr, mettez bien à jour vos dépendances...
Des outils comme snyk permettent de faire automatiquement des analyses de risques sur le code, exemple, les packages sont vulnérables au DOS denial of service sur le module mem par exemple, introduit par react-scripts...
Suivez le cours sur open class room "des applications ultra rapides avec node js"
https://github.com/Benouzef/SlegeHammer/tree/master/Node101MasterClass
Présentation sur le profil Slideshare: https://www.slideshare.net/BenoitFillon
Titre2
Merci aux sponsors de ce transcript Skillsvalue, Pentalog
Tarifs piges SEO
https://www.redaction-web-seo.fr/tarifs-redaction-web/
https://www.redaction-web-seo.fr/redacteur-web-freelance/
Une question? Posez-la ici
Aide au développement d'applications
Titre2
Une question? Posez-la ici
Aide au développement d'applications
Titre2
Une question? Posez-la ici
Aide au développement d'applications
Ce transcript reflète exclusivement l'opinion de ses auteurs et n’engage en aucune façon Consultingit
Commentaires?
Voilà, j'espère que ça vous a plu. Vos commentaires/remarques sont les bienvenus
ou contactez-nous?