Bun : Le Serveur HTTP en Action
Tags: bunjs, javascript, webdev, tutorial
Published: 2023-11-11 22:15:08

[![Substack Newsletter](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qbg4qlzlytxbzbvj97ia.png)](https://benoitpetit.substack.com/subscribe)

Suite à l’article sur mon enthousiasme concernant bun.js, j'ai voulu en faire un autre au sujet du serveur HTTP intégré de Bun.js.

Il offre une solution intégrée, robuste et performante pour la gestion des requêtes HTTP. Dans cet article, embarquons pour un voyage à la découverte des fonctionnalités géniales de ce serveur HTTP, qui en font un choix de prédilection pour le déploiement d'applications web. 🌐 

## 1. Gestion des Routes et des Middlewares 😎 : 

Le serveur HTTP de Bun simplifie la gestion des routes en permettant une définition claire et concise des points d'entrée de votre application. Les middlewares peuvent être intégrés de manière transparente pour traiter les requêtes avant d'atteindre la logique de l'application, offrant ainsi une flexibilité maximale dans la conception de votre architecture. 

```javascript
import { App } from 'bun';

const app = new App();

// la on dit a bun d'utiliser un middleware
app.use((req, res, next) => {
  // Middleware log
  console.log(`Received request at ${req.path}`);
  next();
});

app.get('/hello', (req, res) => {
  // ici c'est la logique de l'application
  res.send('Hello, world!');
});

// ca c'est pour lancer le serveur
app.start(3000);

```

Plus d'informations : [https://bun.sh/docs/api/http#bun-serve](https://bun.sh/docs/api/http#bun-serve)

## 2. Prise en charge des WebSockets 🌐 : 

Bun va au-delà de la simple gestion des requêtes HTTP en incluant une prise en charge native des WebSockets. Cette fonctionnalité permet des communications bidirectionnelles en temps réel entre le serveur et le client, ouvrant ainsi un univers d'opportunités pour le développement d'applications interactives. 

```javascript
import { Bun } from 'bun';

// Crée un serveur en utilisant la méthode statique 'serve' de la classe Bun
const server = Bun.serve<{ authToken: string }>({
    // Définit une fonction de rappel pour les requêtes HTTP
    fetch(req, server) {
        // Tente de mettre à niveau la requête en WebSocket
        const success = server.upgrade(req);
        if (success) {
            return undefined;
        }
        // traiter les requêtes HTTP normalement
        return new Response("Hello world!");
    },
    // Définit des fonctions de rappel pour les connexions WebSocket
    websocket: {
        // ca c'est appeller l'orsque un message est reçu
        async message(ws, message) {
            console.log(`Received ${message}`);
            // Renvoie un message au client
            ws.send(`You said: ${message}`);
        },
    },
});

console.log(`Listening on ${server.hostname}:${server.port}`);
```
Plus d'informations ici : [https://bun.sh/docs/api/websockets](https://bun.sh/docs/api/websockets)

## 3. Streaming de Fichiers ⚡️ :
> BunFile est un objet de flux qui peut être utilisé pour envoyer des fichiers en streaming. Il est optimisé pour les performances, car il utilise l'appel système sendfile(2) lorsque cela est possible, permettant des transferts de fichiers sans copie dans le noyau, le moyen le plus rapide d'envoyer des fichiers.


```javascript
Bun.serve({
  // Définit une fonction de rappel pour les requêtes HTTP
  fetch(req) {
    // Renvoie un fichier en streaming avec une promesse
    return new Response(Bun.file("./hello.txt"));
  },
});
```

Plus d'information ici : [https://bun.sh/docs/api/http#streaming-files](https://bun.sh/docs/api/http#streaming-files)


## 4. Sécurité et Performance 🔐💨 : 

Bun assure la sécurité et la performance de votre application web en utilisant les dernières technologies disponibles. Le serveur HTTP de Bun supporte le protocole HTTPS, le chiffrement TLS, la compression gzip, le cache HTTP et bien plus encore. Bun optimise également l'utilisation des ressources du système en utilisant un modèle asynchrone basé sur les coroutines, permettant de gérer un grand nombre de requêtes simultanées sans compromettre la réactivité. 

Plus d'information : [https://bun.sh/docs/api/http#tls](https://bun.sh/docs/api/http#tls)

Je ne pourrais pas tout vous montrer dans cet article, mais vous pouvez retrouver la documentation complète ici 😉 : [https://bun.sh/docs/api/http](https://bun.sh/docs/api/http)

## En gros :

Le serveur HTTP de Bun offre un ensemble complet de fonctionnalités pour le développement d'applications web, de la gestion des routes à la prise en charge native des WebSockets. Sa simplicité d'utilisation, couplée à sa puissance, en fait un choix idéal pour les développeurs cherchant à créer des applications web performantes et évolutives. Explorez la documentation de Bun pour découvrir encore plus de fonctionnalités et accélérer le processus de développement de vos projets web. 🚀 

> ❤️ Mon coup de cœur va à Bun.js, un outil tout-en-un que je recommande vivement à tous les développeurs web.

À bientôt pour un autre article. Ben

---

> 🫶 Si vous aimez mes publications et souhaitez soutenir mon travail, vous pouvez faire un don en cliquant sur le lien Stripe Sponsor ci-dessous ou en scannant le code QR. [lien Stripe Sponsor](https://donate.stripe.com/00g6pJ6R19MJ15S7ss)

---

[![Stripe Sponsor](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ohkf7lrymedkort4w9iz.png)](https://donate.stripe.com/00g6pJ6R19MJ15S7ss)

--- 

👀 See me here : 

- [Substack](https://benoitpetit.substack.com/subscribe)
- [Mastodon](https://piaille.fr/@codingben) 
- [(X) Twitter](https://twitter.com/codingben_)
- [Github](https://github.com/benoitpetit)
- [NPM Packages](https://www.npmjs.com/~codingben)
- [benoitpetit.dev](https://benoitpetit.dev)
- [Dev.to](https://dev.to/benoitpetit)