Prerequis :
- node (version 18) avec npm
- votre editeur (ici vs code)
Dans un nouveau dossier vierge tapez
npm initet suivez les questions, pour le main file entrez 'src/index.ts'
Bubo est conçu pour etre utilisé avec typescript, nous allons donc l'utiliser avec typescript dans notre exemple
à la racine du projet, dans une console entrez:
npm i typescript --save-devpuis
npx tsc --init
pour créer le tsconfig dont on aura besoin pour le projet.
Nous allons y modifier plusieurs choses
- "target": "ESNext"
- "experimentalDecorators": true
- "emitDecoratorMetadata": true
- "module": "ESNext"
- "rootDir": "src"
- "moduleResolution": "Node"
- "outDir": "dist"
de la meme manière dans le package.json
- "type": "module"
- "module": "esnext"
Nous avons besoin de Bubojs Api ainsi que d'un adaptateur Http, par defaut nous allons utiliser TinyHttp
npm i @bubojs/[email protected]
npm i @bubojs/[email protected]
Créez un fichier server.ts dans src
Dans ce fichier nous allons mettre trois éléments pour faire démarrer notre serveur
import { app, Get } from '@bubojs/api'
import { TinyHttpAdapter } from '@bubojs/tinyhttp'
export const startServer = async () => {
try {
const adapter = new TinyHttpAdapter();
app.initHttpModule(adapter);
} catch (error) {
console.log(`An error Occurred during server startup ${error}`);
}
};-
Tout d'abord importez les modules necessaires, nous avons besoin de @bubojs/api qui contient le coeur de bubo ainsi que @bubojs/tinyhttp qui est le module reponsable de l'implementation de tinyhttp pour bubojs
-
Le démarrage est englobé dans un try catch car les erreurs sont censés être traitées par l'utilisateur
-
Créez une instance de TinyHttpAdapteur qui va gérer les requetes et les réponses pour bubo
-
Initialisez Bubo avec l'adaptateur précédement créé
-
Voila c'est fait
class Default {
@Get()
helloworld(){
return "Hello world"
}
}Bubojs est concu pour etre utilisé avec des decorateurs pour la creation de controlleurs et de routes, pour une route aussi simple on utilise un petit hack
-
Créez une classe peu importe le nom, elle va juste nous permettre d'ajouter un decorateur
-
Ajoutez y une fonction qui renvoie ce que vous voulez retourner au client qui va appeller votre route
-
Au dessus de cette fonction ajoutez le decorateur @Get(), il va créer une route, à la racine, qui appellera votre fonction
await startServer();Cette commande à la fin du fichier permet de démarrer le serveur
Pour lancer le projet vous allez ajouter une commande de debug dans le package.json
"scripts": {
"dev": "node --watch --loader ts-node/esm src/server.ts"
}Vous pouvez ajouter d'autres commandes dans "scripts"
Ensuite à la racine de votre projet vous tapez
npm run devvous devriez avoir quelque chose de similaire :
> [email protected] dev
> node --watch --loader ts-node/esm src/server.ts
(node:29148) ExperimentalWarning: Watch mode is an experimental feature and might change at any time
(Use `node --trace-warnings ...` to show where the warning was created)
(node:4760) ExperimentalWarning: Custom ESM Loaders is an experimental feature and might change at any time
(Use `node --trace-warnings ...` to show where the warning was created)
listen to 3000votre serveur est en route, vous pouvez voir le result dans votre navigateur en tapant dans l'adresse http://localhost:3000