Afficher les documents
// pages/api/user.ts
class User {
// GET /api/user
@ Get ( )
async fetchUser ( @ Query ( 'id' ) id : string ) {
const user = await DB . findUserById ( id ) ;
if ( ! user ) {
throw new NotFoundException ( 'User not found.' ) ;
}
return user ;
}
// POST /api/user
@ Post ( )
@ HttpCode ( 201 )
async createUser ( @ Body ( ValidationPipe ) body : CreateUserDto ) {
return await DB . createUser ( body . email ) ;
}
}
export default createHandler ( User ) ;En savoir plus sur la validation ici
export default async ( req : NextApiRequest , res : NextApiResponse ) => {
if ( req . method === 'GET' ) {
const user = await DB . findUserById ( req . query . id ) ;
if ( ! user ) {
return res . status ( 404 ) . json ( {
statusCode : 404 ,
message : 'User not found'
} )
}
return res . json ( user ) ;
} else if ( req . method === 'POST' ) {
// Very primitive e-mail address validation.
if ( ! req . body . email || ( req . body . email && ! req . body . email . includes ( '@' ) ) ) {
return res . status ( 400 ) . json ( {
statusCode : 400 ,
message : 'Invalid e-mail address.'
} )
}
const user = await DB . createUser ( req . body . email ) ;
return res . status ( 201 ) . json ( user ) ;
}
res . status ( 404 ) . json ( {
statusCode : 404 ,
message : 'Not Found'
} ) ;
} La création de fonctions sans serveur de manière déclarative avec les classes et les décorateurs facilite la gestion de la base de code NEXT.js et apporte la commande et la raison à votre base de code /pages/api .
La structure est fortement inspirée par NESTJS, qui est un cadre incroyable pour de nombreux cas d'utilisation. D'un autre côté, un dépôt séparé de NESTJS pour votre backend peut également apporter des frais généraux et une complexité inutiles aux projets avec un ensemble plus petit d'exigences backend. La combinaison de la structure de NESTJS, avec la facilité d'utilisation de Next.js, apporte le meilleur des deux mondes pour le bon cas d'utilisation.
Si vous n'êtes pas familier avec Next.js ou Nestjs et que vous souhaitez plus d'informations (ou si vous devez être convaincue), consultez l'article Awesome Next.js API Routes avec les décorateurs d'api suivant par @tpjnorton
Visitez https://next-api-decorators.vercel.app/docs/#installation pour commencer.
Reportez-vous à nos documents pour les sujets d'utilisation:
Validation
Correspondance d'itinéraire
Utilisation de Middlewares
Custom Middlewares
Tuyaux
Exceptions
| Description | |
|---|---|
@SetHeader(name: string, value: string) | Définit un nom / valeur d'en-tête dans toutes les routes définies dans la classe. |
@UseMiddleware(...middlewares: Middleware[]) | Enregistre un ou plusieurs middlewares pour tous les itinéraires définis dans la classe. |
| Description | |
|---|---|
@Get(path?: string) | Marque la méthode comme GET Handler. |
@Post(path?: string) | Marque la méthode en tant que POST . |
@Put(path?: string) | Marque la méthode comme le gestionnaire PUT . |
@Delete(path?: string) | Marque la méthode comme suppression DELETE . |
@Patch(path?: string) | Marque la méthode comme gestionnaire PATCH . |
@SetHeader(name: string, value: string) | Définit un nom / valeur d'en-tête dans la réponse de l'itinéraire. |
@HttpCode(code: number) | Définit le code HTTP dans la réponse de l'itinéraire. |
@UseMiddleware(...middlewares: Middleware[]) | Enregistre un ou plusieurs moyens moyens pour le gestionnaire. |
| Description | |
|---|---|
@Req() | Obtient l'objet de demande. |
@Res() * | Obtient l'objet de réponse. |
@Body() | Obtient le corps de la demande. |
@Query(key: string) | Obtient une valeur de paramètre de chaîne de requête par clé. |
@Header(name: string) | Obtient une valeur d'en-tête par son nom. |
@Param(key: string) | Obtient une valeur de paramètre d'itinéraire par clé. |
* Notez que lorsque vous injectez @Res() dans un gestionnaire de méthodes, vous devenez responsable de la gestion de la réponse. Ce faisant, vous devez émettre une sorte de réponse en faisant un appel sur l'objet de réponse (par exemple, res.json(...) ou res.send(...) ), ou le serveur HTTP se bloquera.