[{"data":1,"prerenderedAt":1129},["ShallowReactive",2],{"i-ic:outline-arrow-upward":3,"Footer_afPiwGMwNiEyV4syWzw87ovzxHAgs4iwKtCn4zqBf8E":8,"\u002Farticles\u002Fexpress-js-alternative":16,"i-material-symbols:home":1115,"i-material-symbols:ios-share":1117,"Brand_bAcjTzQpW6OVpFK319jfMki97vH1GrZiqHmeI7Xg4o":1119,"ArticleDetails_9vqJe1pYlX8c2sYQFCoPleNVAS0mwEi1rZyu7bhr3VM":1124},{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":7},0,24,false,"\u003Cpath fill=\"currentColor\" d=\"m4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8z\"\u002F>",["Island",9],{"key":10,"result":11},"Footer_afPiwGMwNiEyV4syWzw87ovzxHAgs4iwKtCn4zqBf8E",{"head":12},{"style":13},[14],{"innerHTML":15},":where(.i-mdi\\:github){display:inline-block;width:1em;height:1em;background-color:currentColor;-webkit-mask-image:var(--svg);mask-image:var(--svg);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;--svg:url(\"data:image\u002Fsvg+xml,%3Csvg xmlns='http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5c.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34c-.46-1.16-1.11-1.47-1.11-1.47c-.91-.62.07-.6.07-.6c1 .07 1.53 1.03 1.53 1.03c.87 1.52 2.34 1.07 2.91.83c.09-.65.35-1.09.63-1.34c-2.22-.25-4.55-1.11-4.55-4.92c0-1.11.38-2 1.03-2.71c-.1-.25-.45-1.29.1-2.64c0 0 .84-.27 2.75 1.02c.79-.22 1.65-.33 2.5-.33s1.71.11 2.5.33c1.91-1.29 2.75-1.02 2.75-1.02c.55 1.35.2 2.39.1 2.64c.65.71 1.03 1.6 1.03 2.71c0 3.82-2.34 4.66-4.57 4.91c.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2'\u002F%3E%3C\u002Fsvg%3E\")}",{"id":17,"title":18,"author":19,"body":22,"description":1107,"extension":1108,"meta":1109,"navigation":114,"path":1110,"publicationDate":1111,"seo":1112,"stem":1113,"__hash__":1114},"articles\u002Farticles\u002Fexpress-js-alternative.md","6 alternatives à ExpressJS, la 4ème va vous surprendre !",{"name":20,"url":21},"@patrickfaramaz ","https:\u002F\u002Ftwitter.com\u002Fpatrickfaramaz",{"type":23,"value":24,"toc":1094},"minimark",[25,29,32,35,38,241,244,257,260,271,274,279,284,287,290,293,426,435,439,442,445,448,451,664,671,675,678,681,684,687,780,787,791,795,798,801,804,807,814,817,862,869,873,876,879,882,885,968,975,979,982,985,988,991,994,1046,1053,1057,1087,1090],[26,27,28],"p",{},"ExpressJS a été créé en 2010 par TJ Holowaychuk. Un peu plus d'un an après la création de NodeJS. Il a été conçu pour être un \"framework\" minimaliste et flexible pour les applications web et mobiles.",[26,30,31],{},"NodeJS étant un peu rude à utiliser aux premiers abords avec les streams, pipes et autres callbacks.",[26,33,34],{},"ExpressJS a été créé pour faciliter la vie des développeurs avec des fonctions simples pour créer un serveur web.",[26,36,37],{},"Exemple de code ExpressJS :",[39,40,45],"pre",{"className":41,"code":42,"language":43,"meta":44,"style":44},"language-javascript shiki shiki-themes synthwave-84","const express = require('express')\nconst app = express()\nconst port = 3000\n\napp.get('\u002F', (req, res) => {\n  res.send('Hello World!')\n})\n\napp.listen(port, () => {\n  console.log(`Example app listening on port ${port}`)\n})\n","javascript","",[46,47,48,80,95,109,116,155,173,179,184,206,236],"code",{"__ignoreMap":44},[49,50,53,57,61,65,69,73,77],"span",{"class":51,"line":52},"line",1,[49,54,56],{"class":55},"scrqX","const",[49,58,60],{"class":59},"sqjNi"," express",[49,62,64],{"class":63},"sW278"," =",[49,66,68],{"class":67},"sgRlq"," require",[49,70,72],{"class":71},"soy-K","(",[49,74,76],{"class":75},"sFl1-","'express'",[49,78,79],{"class":71},")\n",[49,81,83,85,88,90,92],{"class":51,"line":82},2,[49,84,56],{"class":55},[49,86,87],{"class":59}," app",[49,89,64],{"class":63},[49,91,60],{"class":67},[49,93,94],{"class":71},"()\n",[49,96,98,100,103,105],{"class":51,"line":97},3,[49,99,56],{"class":55},[49,101,102],{"class":59}," port",[49,104,64],{"class":63},[49,106,108],{"class":107},"sz5MA"," 3000\n",[49,110,112],{"class":51,"line":111},4,[49,113,115],{"emptyLinePlaceholder":114},true,"\n",[49,117,119,122,125,128,130,133,136,140,143,146,149,152],{"class":51,"line":118},5,[49,120,121],{"class":59},"app",[49,123,124],{"class":71},".",[49,126,127],{"class":67},"get",[49,129,72],{"class":71},[49,131,132],{"class":75},"'\u002F'",[49,134,135],{"class":71},", (",[49,137,139],{"class":138},"sH7Js","req",[49,141,142],{"class":71},", ",[49,144,145],{"class":138},"res",[49,147,148],{"class":71},") ",[49,150,151],{"class":55},"=>",[49,153,154],{"class":71}," {\n",[49,156,158,161,163,166,168,171],{"class":51,"line":157},6,[49,159,160],{"class":59},"  res",[49,162,124],{"class":71},[49,164,165],{"class":67},"send",[49,167,72],{"class":71},[49,169,170],{"class":75},"'Hello World!'",[49,172,79],{"class":71},[49,174,176],{"class":51,"line":175},7,[49,177,178],{"class":71},"})\n",[49,180,182],{"class":51,"line":181},8,[49,183,115],{"emptyLinePlaceholder":114},[49,185,187,189,191,194,196,199,202,204],{"class":51,"line":186},9,[49,188,121],{"class":59},[49,190,124],{"class":71},[49,192,193],{"class":67},"listen",[49,195,72],{"class":71},[49,197,198],{"class":59},"port",[49,200,201],{"class":71},", () ",[49,203,151],{"class":55},[49,205,154],{"class":71},[49,207,209,212,214,217,219,222,226,228,231,234],{"class":51,"line":208},10,[49,210,211],{"class":59},"  console",[49,213,124],{"class":71},[49,215,216],{"class":67},"log",[49,218,72],{"class":71},[49,220,221],{"class":75},"`Example app listening on port ",[49,223,225],{"class":224},"sfE7D","${",[49,227,198],{"class":59},[49,229,230],{"class":224},"}",[49,232,233],{"class":75},"`",[49,235,79],{"class":71},[49,237,239],{"class":51,"line":238},11,[49,240,178],{"class":71},[26,242,243],{},"Aujourd'hui encore, 13 ans après sa première version, il est encore le framework Node.js le plus populaire malgré les reproches qu'on lui fait :",[245,246,247,251,254],"ul",{},[248,249,250],"li",{},"lenteur",[248,252,253],{},"plus maintenu",[248,255,256],{},"pas de support natif de TypeScript",[26,258,259],{},"Qu'est ce qui fait que la plupart des développeurs Node.js utilisent encore ExpressJS en 2023 ?",[245,261,262,265,268],{},[248,263,264],{},"la facilité ? il est simple et rapide à prendre en main",[248,266,267],{},"les formations ? il est enseigné dans la plupart des formations javascript",[248,269,270],{},"les ressources ? il y a beaucoup de tuto disponible sur internet",[26,272,273],{},"On ne sait pas vraiment. Malgré cela, il existe aujourd'hui des vraies alternatives à ExpressJS.\nNous allons vous présenter 6 alternatives à ExpressJS.",[275,276,278],"h2",{"id":277},"les-frameworks-minimalistes","Les frameworks minimalistes",[280,281,283],"h3",{"id":282},"_1-h3","1. H3",[26,285,286],{},"Crée par l'équipe UnJS (derrière NuxtJS), H3 est un framework minimaliste qui se veut simple et rapide à prendre en main. Un peu comme ExpressJS.",[26,288,289],{},"Il est parfaitement portable en étant compatible en environnement serverless, workers et NodeJS.",[26,291,292],{},"Exemple de code H3 :",[39,294,296],{"className":41,"code":295,"language":43,"meta":44,"style":44},"import { createApp, eventHandler, toNodeListener } from \"h3\";\nimport { listen } from \"listhen\";\n\nconst app = createApp();\napp.use(\n  \"\u002F\",\n  eventHandler(() => \"Hello world!\"),\n);\n\nlisten(toNodeListener(app));\n",[46,297,298,331,348,352,366,378,386,402,407,411],{"__ignoreMap":44},[49,299,300,303,306,309,311,314,316,319,322,325,328],{"class":51,"line":52},[49,301,302],{"class":224},"import",[49,304,305],{"class":71}," { ",[49,307,308],{"class":59},"createApp",[49,310,142],{"class":71},[49,312,313],{"class":59},"eventHandler",[49,315,142],{"class":71},[49,317,318],{"class":59},"toNodeListener",[49,320,321],{"class":71}," } ",[49,323,324],{"class":55},"from",[49,326,327],{"class":75}," \"h3\"",[49,329,330],{"class":71},";\n",[49,332,333,335,337,339,341,343,346],{"class":51,"line":82},[49,334,302],{"class":224},[49,336,305],{"class":71},[49,338,193],{"class":59},[49,340,321],{"class":71},[49,342,324],{"class":55},[49,344,345],{"class":75}," \"listhen\"",[49,347,330],{"class":71},[49,349,350],{"class":51,"line":97},[49,351,115],{"emptyLinePlaceholder":114},[49,353,354,356,358,360,363],{"class":51,"line":111},[49,355,56],{"class":55},[49,357,87],{"class":59},[49,359,64],{"class":63},[49,361,362],{"class":67}," createApp",[49,364,365],{"class":71},"();\n",[49,367,368,370,372,375],{"class":51,"line":118},[49,369,121],{"class":59},[49,371,124],{"class":71},[49,373,374],{"class":67},"use",[49,376,377],{"class":71},"(\n",[49,379,380,383],{"class":51,"line":157},[49,381,382],{"class":75},"  \"\u002F\"",[49,384,385],{"class":71},",\n",[49,387,388,391,394,396,399],{"class":51,"line":175},[49,389,390],{"class":67},"  eventHandler",[49,392,393],{"class":71},"(() ",[49,395,151],{"class":55},[49,397,398],{"class":75}," \"Hello world!\"",[49,400,401],{"class":71},"),\n",[49,403,404],{"class":51,"line":181},[49,405,406],{"class":71},");\n",[49,408,409],{"class":51,"line":186},[49,410,115],{"emptyLinePlaceholder":114},[49,412,413,415,417,419,421,423],{"class":51,"line":208},[49,414,193],{"class":67},[49,416,72],{"class":71},[49,418,318],{"class":67},[49,420,72],{"class":71},[49,422,121],{"class":59},[49,424,425],{"class":71},"));\n",[26,427,428,429],{},"Plus d'infos sur H3 : ",[430,431,432],"a",{"href":432,"rel":433},"https:\u002F\u002Funjs.io\u002Fpackages\u002Fh3",[434],"nofollow",[280,436,438],{"id":437},"_2-fastify","2. Fastify",[26,440,441],{},"Fastify est un framework Node.js qui se veut rapide et léger. De base il est ultraléger et ne contient que le strict minimum.",[26,443,444],{},"La vitesse est son point fort et sa plus grande force.",[26,446,447],{},"Il est très facilement extensible avec des plugins, des hooks et des décorateurs. Il offre une très bonne expérience de développement.",[26,449,450],{},"Exemple de code Fastify :",[39,452,454],{"className":41,"code":453,"language":43,"meta":44,"style":44},"\u002F\u002F Require the framework and instantiate it\nconst fastify = require('fastify')({ logger: true })\n\n\u002F\u002F Declare a route\nfastify.get('\u002F', function handler (request, reply) {\n  reply.send({ hello: 'world' })\n})\n\n\u002F\u002F Run the server!\nfastify.listen({ port: 3000 }, (err) => {\n  if (err) {\n    fastify.log.error(err)\n    process.exit(1)\n  }\n})\n",[46,455,456,462,495,499,504,539,561,565,569,574,603,614,635,653,659],{"__ignoreMap":44},[49,457,458],{"class":51,"line":52},[49,459,461],{"class":460},"sjThu","\u002F\u002F Require the framework and instantiate it\n",[49,463,464,466,469,471,473,475,478,481,484,488,492],{"class":51,"line":82},[49,465,56],{"class":55},[49,467,468],{"class":59}," fastify",[49,470,64],{"class":63},[49,472,68],{"class":67},[49,474,72],{"class":71},[49,476,477],{"class":75},"'fastify'",[49,479,480],{"class":71},")({ ",[49,482,483],{"class":59},"logger",[49,485,487],{"class":486},"s2hdG",":",[49,489,491],{"class":490},"sSmKr"," true",[49,493,494],{"class":71}," })\n",[49,496,497],{"class":51,"line":97},[49,498,115],{"emptyLinePlaceholder":114},[49,500,501],{"class":51,"line":111},[49,502,503],{"class":460},"\u002F\u002F Declare a route\n",[49,505,506,509,511,513,515,517,519,522,525,528,531,533,536],{"class":51,"line":118},[49,507,508],{"class":59},"fastify",[49,510,124],{"class":71},[49,512,127],{"class":67},[49,514,72],{"class":71},[49,516,132],{"class":75},[49,518,142],{"class":71},[49,520,521],{"class":55},"function",[49,523,524],{"class":67}," handler",[49,526,527],{"class":71}," (",[49,529,530],{"class":138},"request",[49,532,142],{"class":71},[49,534,535],{"class":138},"reply",[49,537,538],{"class":71},") {\n",[49,540,541,544,546,548,551,554,556,559],{"class":51,"line":157},[49,542,543],{"class":59},"  reply",[49,545,124],{"class":71},[49,547,165],{"class":67},[49,549,550],{"class":71},"({ ",[49,552,553],{"class":59},"hello",[49,555,487],{"class":486},[49,557,558],{"class":75}," 'world'",[49,560,494],{"class":71},[49,562,563],{"class":51,"line":175},[49,564,178],{"class":71},[49,566,567],{"class":51,"line":181},[49,568,115],{"emptyLinePlaceholder":114},[49,570,571],{"class":51,"line":186},[49,572,573],{"class":460},"\u002F\u002F Run the server!\n",[49,575,576,578,580,582,584,586,588,591,594,597,599,601],{"class":51,"line":208},[49,577,508],{"class":59},[49,579,124],{"class":71},[49,581,193],{"class":67},[49,583,550],{"class":71},[49,585,198],{"class":59},[49,587,487],{"class":486},[49,589,590],{"class":107}," 3000",[49,592,593],{"class":71}," }, (",[49,595,596],{"class":138},"err",[49,598,148],{"class":71},[49,600,151],{"class":55},[49,602,154],{"class":71},[49,604,605,608,610,612],{"class":51,"line":238},[49,606,607],{"class":55},"  if",[49,609,527],{"class":71},[49,611,596],{"class":59},[49,613,538],{"class":71},[49,615,617,620,622,624,626,629,631,633],{"class":51,"line":616},12,[49,618,619],{"class":59},"    fastify",[49,621,124],{"class":71},[49,623,216],{"class":59},[49,625,124],{"class":71},[49,627,628],{"class":67},"error",[49,630,72],{"class":71},[49,632,596],{"class":59},[49,634,79],{"class":71},[49,636,638,641,643,646,648,651],{"class":51,"line":637},13,[49,639,640],{"class":59},"    process",[49,642,124],{"class":71},[49,644,645],{"class":67},"exit",[49,647,72],{"class":71},[49,649,650],{"class":107},"1",[49,652,79],{"class":71},[49,654,656],{"class":51,"line":655},14,[49,657,658],{"class":71},"  }\n",[49,660,662],{"class":51,"line":661},15,[49,663,178],{"class":71},[26,665,666,667],{},"Plus d'infos sur Fastify : ",[430,668,669],{"href":669,"rel":670},"https:\u002F\u002Ffastify.dev\u002F",[434],[280,672,674],{"id":673},"_3-hono","3. Hono",[26,676,677],{},"Hono est un framework minimaliste qui se veut rapide et léger.",[26,679,680],{},"Il a l'avantage d'être compatible avec une multitude d'environnements : Cloudflare, Fastly, Deno, Bun, AWS, Lagon, etc.",[26,682,683],{},"Il dispose de toutes les fonctionnalités de base : routing, middleware, etc. et il supporte nativement TypeScript.",[26,685,686],{},"Exemple de code Hono :",[39,688,690],{"className":41,"code":689,"language":43,"meta":44,"style":44},"import { Hono } from 'hono'\nconst app = new Hono()\n\napp.get('\u002F', (c) => c.text('Hono!'))\n\nexport default app\n",[46,691,692,708,724,728,765,769],{"__ignoreMap":44},[49,693,694,696,698,701,703,705],{"class":51,"line":52},[49,695,302],{"class":224},[49,697,305],{"class":71},[49,699,700],{"class":59},"Hono",[49,702,321],{"class":71},[49,704,324],{"class":55},[49,706,707],{"class":75}," 'hono'\n",[49,709,710,712,714,716,719,722],{"class":51,"line":82},[49,711,56],{"class":55},[49,713,87],{"class":59},[49,715,64],{"class":63},[49,717,718],{"class":55}," new",[49,720,721],{"class":67}," Hono",[49,723,94],{"class":71},[49,725,726],{"class":51,"line":97},[49,727,115],{"emptyLinePlaceholder":114},[49,729,730,732,734,736,738,740,742,745,747,749,752,754,757,759,762],{"class":51,"line":111},[49,731,121],{"class":59},[49,733,124],{"class":71},[49,735,127],{"class":67},[49,737,72],{"class":71},[49,739,132],{"class":75},[49,741,135],{"class":71},[49,743,744],{"class":138},"c",[49,746,148],{"class":71},[49,748,151],{"class":55},[49,750,751],{"class":59}," c",[49,753,124],{"class":71},[49,755,756],{"class":67},"text",[49,758,72],{"class":71},[49,760,761],{"class":75},"'Hono!'",[49,763,764],{"class":71},"))\n",[49,766,767],{"class":51,"line":118},[49,768,115],{"emptyLinePlaceholder":114},[49,770,771,774,777],{"class":51,"line":157},[49,772,773],{"class":224},"export",[49,775,776],{"class":55}," default",[49,778,779],{"class":59}," app\n",[26,781,782,783],{},"Plus d'infos sur Hono : ",[430,784,785],{"href":785,"rel":786},"https:\u002F\u002Fhono.dev\u002F",[434],[275,788,790],{"id":789},"les-frameworks-plus-complets","Les frameworks plus complets",[280,792,794],{"id":793},"_4-nitro","4. Nitro",[26,796,797],{},"Nitro est un framework 100% Typescript. Tout comme H3, il nous vient de l'écosystème UnJS.",[26,799,800],{},"Il embarque un tas de fonctionnalité pour vous simplifier la vie : routing basé sur les fichiers, auto-import, système de cache, middleware, plugins, etc.",[26,802,803],{},"Tout comme H3, il est compatible avec les environnements serverless, workers et NodeJS.",[26,805,806],{},"C'est notre framework préféré dans cette liste !",[26,808,809,810],{},"Vidéo de Daniel Roe sur Nitro. Construire un framework React avec Nitro durant une présentation : ",[430,811,812],{"href":812,"rel":813},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=hdHLU0qHKhA",[434],[26,815,816],{},"Exemple de code Nitro :",[39,818,820],{"className":41,"code":819,"language":43,"meta":44,"style":44},"\u002F\u002F api\u002Fhello.ts\nexport default defineEventHandler(() => {\n  return { hello: 'world' }\n})\n",[46,821,822,827,842,858],{"__ignoreMap":44},[49,823,824],{"class":51,"line":52},[49,825,826],{"class":460},"\u002F\u002F api\u002Fhello.ts\n",[49,828,829,831,833,836,838,840],{"class":51,"line":82},[49,830,773],{"class":224},[49,832,776],{"class":55},[49,834,835],{"class":67}," defineEventHandler",[49,837,393],{"class":71},[49,839,151],{"class":55},[49,841,154],{"class":71},[49,843,844,847,849,851,853,855],{"class":51,"line":97},[49,845,846],{"class":55},"  return",[49,848,305],{"class":71},[49,850,553],{"class":59},[49,852,487],{"class":486},[49,854,558],{"class":75},[49,856,857],{"class":71}," }\n",[49,859,860],{"class":51,"line":111},[49,861,178],{"class":71},[26,863,864,865],{},"Plus d'infos sur Nitro : ",[430,866,867],{"href":867,"rel":868},"https:\u002F\u002Funjs.io\u002Fpackages\u002Fnitro",[434],[280,870,872],{"id":871},"_5-nest-js","5. Nest JS",[26,874,875],{},"NestJS est un framework Node.js qui se veut robuste et performant. Il supporte nativement TypeScript. Avec lui vous pouvez faire de l'orienté objet, du fonctionnal et de la programmation réactive.",[26,877,878],{},"Par défaut, il utilise ExpressJS sous le capot mais il est possible de le faire fonctionner avec Fastify.",[26,880,881],{},"Pour être honnête, Nest JS est plus compliqué à prendre en main mais il est beaucoup plus puissant.",[26,883,884],{},"Exemple de code NestJS :",[39,886,888],{"className":41,"code":887,"language":43,"meta":44,"style":44},"import { Injectable } from '@nestjs\u002Fcommon';\n\n@Injectable()\nexport class AppService {\n  getHello(): string {\n    return 'Hello, world!';\n  }\n}\n",[46,889,890,908,912,921,934,949,959,963],{"__ignoreMap":44},[49,891,892,894,896,899,901,903,906],{"class":51,"line":52},[49,893,302],{"class":224},[49,895,305],{"class":71},[49,897,898],{"class":59},"Injectable",[49,900,321],{"class":71},[49,902,324],{"class":55},[49,904,905],{"class":75}," '@nestjs\u002Fcommon'",[49,907,330],{"class":71},[49,909,910],{"class":51,"line":82},[49,911,115],{"emptyLinePlaceholder":114},[49,913,914,917,919],{"class":51,"line":97},[49,915,916],{"class":71},"@",[49,918,898],{"class":67},[49,920,94],{"class":71},[49,922,923,925,928,932],{"class":51,"line":111},[49,924,773],{"class":224},[49,926,927],{"class":55}," class",[49,929,931],{"class":930},"sRQ1T"," AppService",[49,933,154],{"class":71},[49,935,936,939,942,944,947],{"class":51,"line":118},[49,937,938],{"class":67},"  getHello",[49,940,941],{"class":71},"()",[49,943,487],{"class":55},[49,945,946],{"class":930}," string",[49,948,154],{"class":71},[49,950,951,954,957],{"class":51,"line":157},[49,952,953],{"class":55},"    return",[49,955,956],{"class":75}," 'Hello, world!'",[49,958,330],{"class":71},[49,960,961],{"class":51,"line":175},[49,962,658],{"class":71},[49,964,965],{"class":51,"line":181},[49,966,967],{"class":71},"}\n",[26,969,970,971],{},"Plus d'infos sur NestJS : ",[430,972,973],{"href":973,"rel":974},"https:\u002F\u002Fnestjs.com\u002F",[434],[280,976,978],{"id":977},"_6-adonisjs","6. AdonisJS",[26,980,981],{},"AdonisJS est un framework très complet qui vous permet de créer toutes sortes de projets, de l'application web complète à l'API.",[26,983,984],{},"Il est basé lui aussi sur TypeScript. Il offre tout un tas de fonctionnalités de base comme les controllers, les middlewares, les gestions des fichiers en uploads, les cookies, etc.",[26,986,987],{},"Il embarque aussi un ORM pour gérer vos bases de données.",[26,989,990],{},"C'est un framework très complet équivalent à Laravel pour PHP.",[26,992,993],{},"Exemple de code AdonisJS :",[39,995,997],{"className":41,"code":996,"language":43,"meta":44,"style":44},"import Route from '@ioc:Adonis\u002FCore\u002FRoute'\n\nRoute.get('\u002F', () => {\n  return 'Hello world'\n})\n",[46,998,999,1012,1016,1035,1042],{"__ignoreMap":44},[49,1000,1001,1003,1006,1009],{"class":51,"line":52},[49,1002,302],{"class":224},[49,1004,1005],{"class":59}," Route",[49,1007,1008],{"class":55}," from",[49,1010,1011],{"class":75}," '@ioc:Adonis\u002FCore\u002FRoute'\n",[49,1013,1014],{"class":51,"line":82},[49,1015,115],{"emptyLinePlaceholder":114},[49,1017,1018,1021,1023,1025,1027,1029,1031,1033],{"class":51,"line":97},[49,1019,1020],{"class":59},"Route",[49,1022,124],{"class":71},[49,1024,127],{"class":67},[49,1026,72],{"class":71},[49,1028,132],{"class":75},[49,1030,201],{"class":71},[49,1032,151],{"class":55},[49,1034,154],{"class":71},[49,1036,1037,1039],{"class":51,"line":111},[49,1038,846],{"class":55},[49,1040,1041],{"class":75}," 'Hello world'\n",[49,1043,1044],{"class":51,"line":118},[49,1045,178],{"class":71},[26,1047,1048,1049],{},"Plus d'infos sur AdonisJS : ",[430,1050,1051],{"href":1051,"rel":1052},"https:\u002F\u002Fadonisjs.com\u002F",[434],[275,1054,1056],{"id":1055},"a-voir-aussi","A voir aussi",[245,1058,1059,1066,1073,1080],{},[248,1060,1061,1062],{},"Koa : ",[430,1063,1064],{"href":1064,"rel":1065},"https:\u002F\u002Fkoajs.com\u002F",[434],[248,1067,1068,1069],{},"Sails : ",[430,1070,1071],{"href":1071,"rel":1072},"https:\u002F\u002Fsailsjs.com\u002F",[434],[248,1074,1075,1076],{},"Hapi : ",[430,1077,1078],{"href":1078,"rel":1079},"https:\u002F\u002Fhapi.dev\u002F",[434],[248,1081,1082,1083],{},"Derby : ",[430,1084,1085],{"href":1085,"rel":1086},"https:\u002F\u002Fderbyjs.com\u002F",[434],[26,1088,1089],{},"Pour conclure, même si ExpressJS est encore une solution viable pour développer une petite API, il existe aujourd'hui des alternatives plus modernes et tout aussi simples à prendre en main.",[1091,1092,1093],"style",{},"html pre.shiki code .scrqX, html code.shiki .scrqX{--shiki-default:#FEDE5D}html pre.shiki code .sqjNi, html code.shiki .sqjNi{--shiki-default:#FF7EDB}html pre.shiki code .sW278, html code.shiki .sW278{--shiki-default:#FFFFFFEE}html pre.shiki code .sgRlq, html code.shiki .sgRlq{--shiki-default:#36F9F6}html pre.shiki code .soy-K, html code.shiki .soy-K{--shiki-default:#BBBBBB}html pre.shiki code .sFl1-, html code.shiki .sFl1-{--shiki-default:#FF8B39}html pre.shiki code .sz5MA, html code.shiki .sz5MA{--shiki-default:#2EE2FA}html pre.shiki code .sH7Js, html code.shiki .sH7Js{--shiki-default:#FF7EDB;--shiki-default-font-style:italic}html pre.shiki code .sfE7D, html code.shiki .sfE7D{--shiki-default:#72F1B8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sjThu, html code.shiki .sjThu{--shiki-default:#848BBD;--shiki-default-font-style:italic}html pre.shiki code .s2hdG, html code.shiki .s2hdG{--shiki-default:#B6B1B1}html pre.shiki code .sSmKr, html code.shiki .sSmKr{--shiki-default:#F97E72}html pre.shiki code .sRQ1T, html code.shiki .sRQ1T{--shiki-default:#FE4450}",{"title":44,"searchDepth":82,"depth":82,"links":1095},[1096,1101,1106],{"id":277,"depth":82,"text":278,"children":1097},[1098,1099,1100],{"id":282,"depth":97,"text":283},{"id":437,"depth":97,"text":438},{"id":673,"depth":97,"text":674},{"id":789,"depth":82,"text":790,"children":1102},[1103,1104,1105],{"id":793,"depth":97,"text":794},{"id":871,"depth":97,"text":872},{"id":977,"depth":97,"text":978},{"id":1055,"depth":82,"text":1056},"ExpressJS a été créé en 2010 par TJ Holowaychuk. Il a été conçu pour être un \"framework\" minimaliste et flexible pour les applications web et mobiles.ExpressJS a été créé pour faciliter la vie des développeurs avec des fonctions simples pour créer un serveur web.","md",{},"\u002Farticles\u002Fexpress-js-alternative","2024-01-08",{"title":18,"description":1107},"articles\u002Fexpress-js-alternative","9h2UJPLeAHvjECkDV5rZ_R1q42IyaYDoIoGgh5-OUYo",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":1116},"\u003Cpath fill=\"currentColor\" d=\"M4 21V9l8-6l8 6v12h-6v-7h-4v7z\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":1118},"\u003Cpath fill=\"currentColor\" d=\"M6 22q-.825 0-1.412-.587T4 20V10q0-.825.588-1.412T6 8h3v2H6v10h12V10h-3V8h3q.825 0 1.413.588T20 10v10q0 .825-.587 1.413T18 22zm5-6V4.825l-1.6 1.6L8 5l4-4l4 4l-1.4 1.425l-1.6-1.6V16z\"\u002F>",["Island",1120],{"key":1121,"result":1122},"Brand_bAcjTzQpW6OVpFK319jfMki97vH1GrZiqHmeI7Xg4o",{"head":1123},{},["Island",1125],{"key":1126,"result":1127},"ArticleDetails_9vqJe1pYlX8c2sYQFCoPleNVAS0mwEi1rZyu7bhr3VM",{"head":1128},{},1785405173910]