Consulting, services, computer engineering. Implementation of technology solutions and support for businesses.

Star InactiveStar InactiveStar InactiveStar InactiveStar Inactive
 

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

Piges SEO Consultingit

Tarifs piges SEO

https://www.redaction-web-seo.fr/tarifs-redaction-web/

https://www.redaction-web-seo.fr/redacteur-web-freelance/

 

 

Consultingit suite fleche 299

 

  

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?