Ver docs
// 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 ) ;Leia mais sobre a validação aqui
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'
} ) ;
} Construir funções sem servidor declarativamente com classes e decoradores facilitam o tratamento da API Next.JS Rotas e traz ordem e sanidade à sua base de código /pages/api .
A estrutura é fortemente inspirada pelos Nestjs, que é uma estrutura incrível para muitos casos de uso. Por outro lado, um repositório NestJS separado para o seu back -end também pode trazer sobrecarga desnecessária e complexidade para projetos com um conjunto menor de requisitos de back -end. Combinando a estrutura dos Nestjs, com a facilidade de uso do Next.js, traz o melhor dos dois mundos para o caso de uso certo.
Se você não estiver familiarizado com o Next.js ou Nestjs e deseja mais algumas informações (ou precisarem ser convencidas), confira o artigo Awesome Next.js API Rotas com o próximo-api-Decorators por @tpjnorton
Visite https://next-api-decorators.vercel.app/docs/#installation para começar.
Consulte nossos documentos para tópicos de uso:
Validação
Correspondência de rota
Usando middlewares
Middlewares personalizados
Tubos
Exceções
| Descrição | |
|---|---|
@SetHeader(name: string, value: string) | Define um nome/valor do cabeçalho em todas as rotas definidas na classe. |
@UseMiddleware(...middlewares: Middleware[]) | Registra um ou vários meios de idade para todas as rotas definidas na classe. |
| Descrição | |
|---|---|
@Get(path?: string) | Marca o método como GET manipulador. |
@Post(path?: string) | Marca o método como manipulador POST . |
@Put(path?: string) | Marca o método como PUT . |
@Delete(path?: string) | Marca o método como manipulador DELETE . |
@Patch(path?: string) | Marca o método como manipulador PATCH . |
@SetHeader(name: string, value: string) | Define um nome/valor do cabeçalho na resposta da rota. |
@HttpCode(code: number) | Define o código HTTP na resposta da rota. |
@UseMiddleware(...middlewares: Middleware[]) | Registra um ou vários meios de idade para o manipulador. |
| Descrição | |
|---|---|
@Req() | Recebe o objeto de solicitação. |
@Res() * | Recebe o objeto de resposta. |
@Body() | Recebe o corpo do pedido. |
@Query(key: string) | Obtém um valor de parâmetro de sequência de consulta por chave. |
@Header(name: string) | Obtém um valor de cabeçalho pelo nome. |
@Param(key: string) | Obtém um valor de parâmetro de rota por chave. |
* Observe que quando você injetar @Res() em um manipulador de métodos, você se torna responsável por gerenciar a resposta. Ao fazer isso, você deve emitir algum tipo de resposta, fazendo uma chamada no objeto de resposta (por exemplo, res.json(...) ou res.send(...) ), ou o servidor HTTP pendurará.