Ver documentos
// 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 ) ;Lea más sobre la validación aquí
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 construcción de funciones sin servidor declarativamente con clases y decoradores facilita el trato con las rutas API de Next.js y trae orden y cordura a su base de código /pages/api .
La estructura está fuertemente inspirada en Nestjs, que es un marco sorprendente para muchos casos de uso. Por otro lado, un repositorio de Nestjs separado para su backend también puede traer sobrecarga innecesaria y complejidad a los proyectos con un conjunto más pequeño de requisitos de backend. La combinación de la estructura de Nestjs, con la facilidad de uso de Next.js, trae lo mejor de ambos mundos para el caso de uso correcto.
Si no está familiarizado con Next.js o Nestjs y desea más información (o necesita ser convencido), consulte el artículo Awesome Next.js API Rutas con los decoradores de Next-API por @tpjnorton
Visite https://next-api-decorators.vercel.app/docs/#installation para comenzar.
Consulte nuestros documentos para obtener temas de uso:
Validación
Emparejamiento de ruta
Usando MiddleWares
Middlewares personalizados
Tubería
Excepciones
| Descripción | |
|---|---|
@SetHeader(name: string, value: string) | Establece un nombre/valor del encabezado en todas las rutas definidas en la clase. |
@UseMiddleware(...middlewares: Middleware[]) | Registra uno o múltiples artículos intermedios para todas las rutas definidas en la clase. |
| Descripción | |
|---|---|
@Get(path?: string) | Marca el método como GET . |
@Post(path?: string) | Marca el método como controlador POST . |
@Put(path?: string) | Marca el método como controlador PUT . |
@Delete(path?: string) | Marca el método como controlador DELETE . |
@Patch(path?: string) | Marca el método como controlador PATCH . |
@SetHeader(name: string, value: string) | Establece un nombre/valor del encabezado en la respuesta de la ruta. |
@HttpCode(code: number) | Establece el código HTTP en la respuesta de ruta. |
@UseMiddleware(...middlewares: Middleware[]) | Registra uno o múltiples artículos intermedios para el controlador. |
| Descripción | |
|---|---|
@Req() | Obtiene el objeto de solicitud. |
@Res() * | Obtiene el objeto de respuesta. |
@Body() | Obtiene el cuerpo de solicitud. |
@Query(key: string) | Obtiene un valor de parámetro de cadena de consulta por clave. |
@Header(name: string) | Obtiene un valor de encabezado por nombre. |
@Param(key: string) | Obtiene un valor de parámetro de ruta por clave. |
* Tenga en cuenta que cuando inyectas @Res() en un controlador de métodos, se hace responsable de administrar la respuesta. Al hacerlo, debe emitir algún tipo de respuesta haciendo una llamada sobre el objeto de respuesta (por ejemplo, res.json(...) o res.send(...) ), o el servidor HTTP colgará.