Salut les Grafikartiens,

Je m'essaye depuis peu au Javascript côté serveur avec l'objectif de créer un petit projet perso avec Node.js pour apprendre et découvrir cette technologie.

J'ai déjà réalisé plusieurs projets en PHP, à chaque fois sans utiliser de framework car je n'en ai jamais ressenti le besoin. En revanche avec Node.js j'ai l'impression que c'est un passage obligatoire et cela ne me pose pas de problème...

J'ai déjà essayé Node + Express dans le passé mais devant la difficulté à trouver des ressources et tutos sur le sujet j'avais fni par abandonner complètement. Au vu de l'essor du JS, de son écosystème et des tutos disponibles et notament ceux de Grafikart je souhaite l'y remettre !

Ma question concerne l'utilisation de Fastify et Adonis, j'ai du mal à comprendre la différence réelle entre les deux :

→ si j'ai bien compris il s'agit de deux frameworks backend pour Node.js ?
→ Adonis serait plus complet avec des modules imposés, c'est bien ça ?
→ est-il judicieux de commencer à apprendre directement Adonis après la découverte des bases de Node.js ?
→ que me conseillerez vous ? (je souhaite rendre des pages dynamiques et communiquer avec une BDD MySQL)

Un autre aspect qui reste opaque pour moi c'est l'articulation qu'il peut y avoir au niveau des technologies front (Vite.js, Vue.js...), leur interractions entre elles ? et avec les technos back (Fastify, Adonis..) ?

Désolé si cela semble un peu décousu, j'ai conscience qu'il y a pas mal de ressources en ligne pour comprendre cela, dont les excellents tutos de Grafikart mais je dois avouer qu'il reste des zones d'ombre pour moi...

Merci d'avance pour votre aide !

6 réponses


popotte
Réponse acceptée

Hello :)

Alors franchement NodeJS c'est juste une runtime, ce n'est pas un langage de programmation, tu fais un fichier server.js, tu initialises un serveur dessus et tu le lances depuis un package.json, et c'est bon, tu as appris les bases necessaires de NodeJS :p

Ensuite tu peux supprimer le fichier serveur.js parce que les frameworks js gèrent déjà Node de leur coté, tu n'as pas à t'en occuper ^^

Pour le choix du framework JS, alors le plus utilisé et le plus populaire c'est NextJS (framework JS basé sur la librairie React)

Adonis c'est surtout une version JS de Laravel, si tu sors de PHP et que tu es habitué au MVC c'est plus facile

Fastify je connais de nom mais jamais testé ^^'

Pour l'interaction front-back, alors avec un framework JS tout se passe en front, les controlers, les models, etc... ca se passe en front, maintenant si tu dois traiter des données sensibles il faut utiliser des api routes pour faire le travail de communication entre le front et le back. Bref l'interraction en JS entre le front et le back c'est sous forme d'appel API, comme si le front et le back étaient séparés (NextJS a fait un système "use server" c'est a peu pres la même chose mais sans que tu ai a faire explicitement un call API)

Mais pour les questions de fond, quand tu passes par un serveur tu n'a pas vraiment besoin de te questionner dessus, c'est le role du framework de gérer tout ce qui est écosystème et toi tu te concentres juste sur le développement de l'appli :p

popotte
Réponse acceptée

Avec plaisir :)

Pour l'API, que ce soit en PHP ou en JS, c'est la même chose, tant que tu sais comment faire un appel et surtout que tu comprends que c'est un simple échange de données, c'est bon

Par exemple:

$client = new GuzzleHttp\Client();
$res = $client->request('GET', 'https://api.github.com/user', [
    'auth' => ['user', 'pass']
]);
const response = await fetch('https://api.github.com/user', {
    method: "get",
    body: JSON.stringify({ auth: ['auth', 'pass'] })
})

Et voila, un call API c'est le même principe pour l'un ou l'autre, tu appelles une url, et tu récupères la réponse donnée

1- Pour le serveur, oui tu peux, tu pointes juste ton call api vers l'endroit où tu cherches ta réponse, dans le cas présent c'est la même url de ton site, tu peux même donner le path sans url dans ce cas:

// Pour appeler https://ton-site.com/api/user
const response = await fetch('/api/user', {
    method: "get",
    body: JSON.stringify({ auth: ['auth', 'pass'] })
})

2- Alors c'est bien le serveur qui configure le moteur de template et le routing comme en PHP, c'est juste le chargement des données et du contenu de page qui sera fait coté front, et le soucis c'est si tu exploites des donées sensibles, qui peuvent apparaitre dans le navigateur, tu peux faire une requette a NodeJS pour gérer le controller et les données, mais il faut le demander explicitement, par contre si tu utilises un framework comme AstroJS ou NextJS, tu n'as pas besoin de le faire, c'est déjà configuré par défaut pour fonctionner coté serveur (et la c'est l'inverse, tu dois le demander explicitement si tu veux que ça se fasse coté front en ajoutant en haut du fichier "use client")

JRcode
Auteur

Hello popotte, merci beaucoup pour cette réponse détaillée qui m'aide à y voir plus clair !

Je vais donc devoir me pencher sur les API que je n'ai encore jamais pratiquées, je suis preneur de tutos sur le sujet car il y a une formation sur ce site mais pour la version PHP il me semble..

Et du coup j'ai 2 nouvelles questions :
1) est ce possible avec la même application de gérér la partie serveur de mon site et de générer les endpoints API ?
2) pourquoi ne peut on envisager de faire une requête http au serveur via l'url et dans la réponse node.js envoyer le html créé par du JS côté serveur avec les éléments de ma bdd par exemple (en gros comme ferait un serveur avec PHP) ?

JRcode
Auteur

Merci, c'est limpide !! je commence à avoir l'impression que c'est finalement pas si compliqué que je le pensais ^^

Je vais désormais me pencher sur les frameworks pour comprendre leur fonctionnement interne...

Une fois que tu connais la programmation toutes les technos "web" sont simples, demain tu peux te mettre à Ruby on Rails si tu prends en compte la logique que tu connais dans les autres langages tu as juste a comprendres les spécificités mais c'est simple, idem si tu veux faire un projet Python :) (après si tu attaques un langage qui part carrément dans un autre paradigme, par exemple C, Rust, Go, Elixir, la oui il faut apprendre une nouvelle logique qui est le langage machine, et apprendre la gestion de mémoire, les garbages, la compilation, etc...)

Pour les framework le plus important c'est la doc a lire de haut en bas, mais c'est assez simple si tu comprends la logique, les frameworks sont conçu pour te faciliter la vie ;)

JRcode
Auteur

Haha oui c'est exactement ça, même si j'en suis encore loin d'être à l'aise sur les langages de base... plusieurs fois j'ai arrêté mon apprentissage en me disant "c'est pas possible, il y a trop de trucs à connaître, j'y arriverais jamais..." et au final à force de m'accrocher et perséverer je réalise que c'est pas tant "la mer à boire" et que les basiques permettent de réalsier 90% du boulot !..