Configuration du projet NestJS
Nous configurons un nouveau projet NestJS ainsi que l'adapter Remix pour servir toutes nos routes.
Configuration du projet
Commençons par créer un nouveau dossier qui va contenir nos deux projets.
1mkdir ~/stack-remix-nestjs # Créer un dossier nommé stack-remix-nestjs à la racine de votre dossier personnel
Nous allons d'abord créer le projet NestJS, qui va se charger par la suite d'exécuter le code source de Remix.
1nest new backend # Crée un projet NestJS nommé backend
Nous utiliserons npm comme package manager.
Nous allons ensuite ouvrir le dossier stack-remix-nestjs dans un éditeur de code (personnellement, j'utilise VSCode).
Configuration de NestJS
Une fois ouvert, notre interface ressemble à ceci

Nous pouvons supprimer le fichier src/app.controller.spec.ts et le dossier test car nous n'en aurons pas besoin.
Création du RemixController
À l'intérieur du fichier src, nous allons créer un dossier nommé remix et à l'intérieur de ce dossier, un fichier remix.controller.ts.
Nous allons créer une route catch-all, qui va rediriger toutes les requêtes vers l'application Remix. (Nous verrons plus tard comment configurer Remix pour qu'il puisse gérer ces requêtes).
1import { All, Controller, Next, Req, Res } from '@nestjs/common';2import { createRequestHandler } from '@remix-run/express';3import { NextFunction, Request, Response } from 'express';45@Controller()6export class RemixController {7constructor() {}89@All('*')10async handler(11@Req() request: Request,12@Res() response: Response,13@Next() next: NextFunction14) {15// Pour le moment, on ne fait rien.16}17}
Nous allons installer une dépendance supplémentaire pour servir l'application Remix.
Configuration de l'adapter Remix
Nous allons installer la librairie @remix-run/express dans notre projet NestJS.
1cd backend # Pour se déplacer dans le dossier backend2npm install @remix-run/express # Pour installer l'adapter Remix
Cette librairie va nous permettre de communiquer avec l'application Remix depuis NestJS.
Modifions le controlleur pour ajouter le handler de Remix.
1import { All, Controller, Next, Req, Res } from '@nestjs/common';2import { createRequestHandler } from '@remix-run/express';3import { NextFunction, Request, Response } from 'express';45@Controller()6export class RemixController {7constructor() {}89@All('*')10async handler(11@Req() request: Request,12@Res() response: Response,13@Next() next: NextFunction14) {15return createRequestHandler({16build: '', // <= TODO: Nous devons définir le chemin du build de Remix17getLoadContext: () => ({18toto: 'Salut, ça va ?',19}),20})(request, response, next);21}22}
N'oublions pas d'importer ce contrôleur dans le fichier app.module.ts, pour qu'il soit détecté par NestJS.
1import { Module } from '@nestjs/common';2import { RemixController } from './remix/remix.controller';34@Module({5imports: [],6controllers: [RemixController],7providers: [],8})9export class AppModule {}
Maintenant, on a besoin de générer le build de l'application Remix pour le servir depuis NestJS.