Skip to content

Créer sa première route

ts
import { ResponseContract, 
useRouteBuilder
} from "@duplojs/http";
import {
DPE
} from "@duplojs/utils";
import {
userSchema
} from "./schema";
import {
getUsers
} from "./getUsers";
useRouteBuilder
("GET", "/users")
.
extract
({
query
: {
page
:
DPE
.
int
().
min
(0),
quantityPerPage
:
DPE
.
int
().
min
(5).
max
(20),
}, }) .
handler
(
ResponseContract.
ok
("users.findMany",
userSchema
.
array
()),
async({
page
,
quantityPerPage
}, {
response
}) => {
const
manyUser
= await
getUsers
({
page
,
quantityPerPage
,
}); return
response
("users.findMany",
manyUser
);
}, );

Il vous suffit d'importer la fonction useRouteBuilder de @duplojs/http pour commencer à créer une route. Chaque méthode appelée de ce builder permet d'ajouter une step à la route. L'ordre d'exécution de ces steps est séquentiel. Une route se lit donc du haut vers le bas.

La méthode handler conclut la création de la route. Cette méthode ajoute automatiquement la route au routeStore.

WARNING

N'oubliez pas d'importer les fichiers contenant vos routes, sinon ceux-ci ne seront pas exécutés et les routes ne seront pas disponibles dans le routeStore.

ts
import { 
createHub
,
routeStore
} from "@duplojs/http";
import "./route"; // don't forget ! const
hub
=
createHub
({
environment
: "DEV" })
.
register
(
routeStore
.
getAll
());

C'est quoi un ResponseContract ?

Les ResponseContract permettent de définir de manière explicite les réponses possibles d'une step. ILS SONT OBLIGATOIRES ! La structure du body se définit via un dataParser de @duplojs/utils.

Ils permettent :

  • d'associer une information à la structure d'un body et à un statut HTTP.
  • de visualiser concrètement ce que renvoie la route et d'éviter donc d'envoyer des champs supplémentaires (coucou le mot de passe en front 👋).
  • d'assister pendant les tests pour être sûr des structures que vous renvoyez.
  • d'être interprétés au runtime pour générer des Swagger ou des contrats de type pour des clients HTTP.
ts
import { ResponseContract } from "@duplojs/http";
import { 
DPE
} from "@duplojs/utils";
ResponseContract.
ok
("superResponse",
DPE
.
string
());
ResponseContract.
created
("superResponse",
DPE
.
object
({
username
:
DPE
.
string
(),
age
:
DPE
.
number
(),
})); ResponseContract.
noContent
("superResponse");
ResponseContract.
conflict
("email.alreadyUse");
ResponseContract.
notFound
("user.notfound");
ResponseContract.
notFound
("product.notfound");

Diffusé sous licence MIT.