Lihat dokumen
// 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 ) ;Baca lebih lanjut tentang validasi di sini
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'
} ) ;
} Membangun fungsi tanpa server secara deklaratif dengan kelas dan dekorator membuat berurusan dengan rute API Next.js lebih mudah dan membawa pesanan dan kewarasan ke basis kode /pages/api Anda.
Strukturnya sangat terinspirasi oleh NestJS, yang merupakan kerangka kerja yang luar biasa untuk banyak kasus penggunaan. Di sisi lain, repo NESTJS terpisah untuk backend Anda juga dapat membawa overhead yang tidak dibutuhkan dan kompleksitas ke proyek dengan serangkaian persyaratan backend yang lebih kecil. Menggabungkan struktur NestJs, dengan kemudahan penggunaan Next.js, membawa yang terbaik dari kedua dunia untuk kasus penggunaan yang tepat.
Jika Anda tidak terbiasa dengan Next.js atau NestJs dan menginginkan beberapa informasi lebih lanjut (atau perlu diyakinkan), lihat artikel yang luar biasa Next.js Rute API dengan Dekorators-API Next oleh @tpjnorton
Kunjungi https://next-api-decorators.vercel.app/docs/#installation untuk memulai.
Lihat dokumen kami untuk topik penggunaan:
Validasi
Pencocokan rute
Menggunakan Middlewares
Middlewares khusus
Pipa
Pengecualian
| Keterangan | |
|---|---|
@SetHeader(name: string, value: string) | Menetapkan nama/nilai header ke dalam semua rute yang ditentukan di kelas. |
@UseMiddleware(...middlewares: Middleware[]) | Mendaftarkan satu atau beberapa pertengahan middlew untuk semua rute yang ditentukan di kelas. |
| Keterangan | |
|---|---|
@Get(path?: string) | Menandai metode ini sebagai GET handler. |
@Post(path?: string) | Menandai metode ini sebagai penangan POST . |
@Put(path?: string) | Menandai metode ini sebagai PUT . |
@Delete(path?: string) | Menandai metode ini sebagai DELETE pawang. |
@Patch(path?: string) | Menandai metode ini sebagai penangan PATCH . |
@SetHeader(name: string, value: string) | Menetapkan nama/nilai header ke dalam respons rute. |
@HttpCode(code: number) | Mengatur kode HTTP dalam respons rute. |
@UseMiddleware(...middlewares: Middleware[]) | Mendaftarkan satu atau beberapa tudung untuk pawang. |
| Keterangan | |
|---|---|
@Req() | Mendapat objek permintaan. |
@Res() * | Mendapat objek respons. |
@Body() | Mendapat Badan Permintaan. |
@Query(key: string) | Mendapat nilai parameter string kueri dengan kunci. |
@Header(name: string) | Mendapat nilai header dengan nama. |
@Param(key: string) | Mendapat nilai parameter rute dengan kunci. |
* Perhatikan bahwa ketika Anda menyuntikkan @Res() dalam metode penangan Anda menjadi bertanggung jawab untuk mengelola respons. Saat melakukannya, Anda harus mengeluarkan semacam respons dengan melakukan panggilan pada objek respons (misalnya, res.json(...) atau res.send(...) ), atau server HTTP akan digantung.