Dokumente anzeigen
// 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 ) ;Lesen Sie hier mehr über die Validierung
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'
} ) ;
} Das Erstellen von serverlosen Funktionen deklarativ mit Klassen und Dekoratoren erleichtert den Umgang mit den API -Routen von Next /pages/api
Die Struktur ist stark von NestJs inspiriert, was für viele Anwendungsfälle ein erstaunlicher Rahmen ist. Auf der anderen Seite kann ein separates NestJS -Repo für Ihr Backend auch unnötige Gemeinkosten und Komplexität zu Projekten mit kleineren Backend -Anforderungen bringen. Die Kombination der Struktur von NestJs mit der einfachen Verwendung von Next.js bietet das Beste aus beiden Welten für den richtigen Anwendungsfall.
Wenn Sie mit Next.js oder NestJs nicht vertraut sind und weitere Informationen wünschen (oder überzeugt werden müssen), lesen Sie den Artikel Awesome Next.js-API-Routen mit dem Dekoratoren von @tpjnorton mit dem Dekoratoren von @tpjnorton
Besuchen Sie https://next-api-decorators.vercel.app/docs/#installation, um loszulegen.
In unseren Dokumenten finden Sie in Verwendungsthemen:
Validierung
Routenpassend
Mit Middlewares
Benutzerdefinierte Middlewares
Rohre
Ausnahmen
| Beschreibung | |
|---|---|
@SetHeader(name: string, value: string) | Legt einen Headernamen/Wert in alle in der Klasse definierten Routen ein. |
@UseMiddleware(...middlewares: Middleware[]) | Registriert ein oder mehrere Middlewares für alle in der Klasse definierten Routen. |
| Beschreibung | |
|---|---|
@Get(path?: string) | Markiert die Methode als GET . |
@Post(path?: string) | Markiert die Methode als POST -Handler. |
@Put(path?: string) | Markiert die Methode als PUT -Handler. |
@Delete(path?: string) | Markiert die Methode als DELETE . |
@Patch(path?: string) | Markiert die Methode als PATCH -Handler. |
@SetHeader(name: string, value: string) | Legt einen Headernamen/Wert in die Routenantwort ein. |
@HttpCode(code: number) | Legt den HTTP -Code in der Routenantwort fest. |
@UseMiddleware(...middlewares: Middleware[]) | Registriert einen oder mehrere Middlewares für den Hundeführer. |
| Beschreibung | |
|---|---|
@Req() | Ruft das Anforderungsobjekt ab. |
@Res() * | Ruft das Antwortobjekt ab. |
@Body() | Erhält die Anfragekörper. |
@Query(key: string) | Ruft einen Parameterwert des Abfragestnzeichens nach Schlüssel ab. |
@Header(name: string) | Ruft einen Header -Wert mit dem Namen ab. |
@Param(key: string) | Ruft einen Routenparameterwert nach Schlüssel ab. |
* Beachten Sie, dass Sie, wenn Sie @Res() in einen Methodenhandler injizieren, für die Verwaltung der Antwort verantwortlich werden. Wenn Sie dies tun, müssen Sie eine Art Antwort ausstellen, indem Sie das Antwortobjekt (z. B. res.json(...) oder res.send(...) ) aufrufen, oder der HTTP -Server hängt.