Nous configurons un nouveau projet NestJS ainsi que l'adapter Remix pour servir toutes nos routes.
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).
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.
À 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.
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.