ดูเอกสาร
// 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 ) ;อ่านเพิ่มเติมเกี่ยวกับการตรวจสอบที่นี่
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'
} ) ;
} การสร้างฟังก์ชั่นที่ไม่มีเซิร์ฟเวอร์ที่มีการประกาศด้วยคลาสและนักตกแต่งทำให้การจัดการกับเส้นทาง Next.js API ง่ายขึ้นและนำการสั่งซื้อและความมีสติไปสู่ /pages/api Codebase ของคุณ
โครงสร้างได้รับแรงบันดาลใจอย่างมากจาก NestJS ซึ่งเป็นกรอบที่น่าทึ่งสำหรับกรณีการใช้งานจำนวนมาก ในทางกลับกันการซื้อคืน NestJS แยกต่างหากสำหรับแบ็กเอนด์ของคุณยังสามารถนำค่าใช้จ่ายที่ไม่จำเป็นและความซับซ้อนมาสู่โครงการที่มีข้อกำหนดแบ็กเอนด์ขนาดเล็กลง การรวมโครงสร้างของ NestJs เข้ากับความสะดวกในการใช้งาน next.js นำสิ่งที่ดีที่สุดของทั้งสองโลกสำหรับกรณีการใช้งานที่เหมาะสม
หากคุณไม่คุ้นเคยกับ next.js หรือ Nestjs และต้องการข้อมูลเพิ่มเติม (หรือจำเป็นต้องเชื่อมั่น) ลองดูบทความที่ยอดเยี่ยม Next.js API เส้นทาง API ด้วยผู้อำนวยการต่อ API Next-Api โดย @tpjnorton
เยี่ยมชม https://next-api-decorators.vercel.app/docs/#installation เพื่อเริ่มต้น
อ้างถึงเอกสารของเราสำหรับหัวข้อการใช้งาน:
การตรวจสอบความถูกต้อง
การจับคู่เส้นทาง
ใช้ Middlewares
มิดเดิ้ลเวทที่กำหนดเอง
ท่อ
ข้อยกเว้น
| คำอธิบาย | |
|---|---|
@SetHeader(name: string, value: string) | ตั้งค่าชื่อ/ค่าส่วนหัวเป็นเส้นทางทั้งหมดที่กำหนดไว้ในคลาส |
@UseMiddleware(...middlewares: Middleware[]) | ลงทะเบียนหนึ่งหรือหลายมิดเดิลเวสสำหรับเส้นทางทั้งหมดที่กำหนดไว้ในชั้นเรียน |
| คำอธิบาย | |
|---|---|
@Get(path?: string) | ทำเครื่องหมายวิธีการเป็นตัว GET |
@Post(path?: string) | ทำเครื่องหมายวิธีการเป็นตัวจัดการ POST |
@Put(path?: string) | ทำเครื่องหมายวิธีการเป็นตัว PUT |
@Delete(path?: string) | ทำเครื่องหมายวิธีการเป็นตัวจัดการ DELETE |
@Patch(path?: string) | ทำเครื่องหมายวิธีการเป็นตัวจัดการ PATCH |
@SetHeader(name: string, value: string) | ตั้งค่าชื่อ/ค่าส่วนหัวเป็นการตอบกลับเส้นทาง |
@HttpCode(code: number) | ตั้งค่ารหัส HTTP ในการตอบกลับเส้นทาง |
@UseMiddleware(...middlewares: Middleware[]) | ลงทะเบียนมิดเดิ้ลแวร์หนึ่งหรือหลายคนสำหรับตัวจัดการ |
| คำอธิบาย | |
|---|---|
@Req() | รับวัตถุคำขอ |
@Res() * | รับวัตถุตอบสนอง |
@Body() | ได้รับการร้องขอร่างกาย |
@Query(key: string) | รับค่าพารามิเตอร์สตริงแบบสอบถามด้วยคีย์ |
@Header(name: string) | รับค่าส่วนหัวตามชื่อ |
@Param(key: string) | รับค่าพารามิเตอร์เส้นทางตามคีย์ |
* โปรดทราบว่าเมื่อคุณฉีด @Res() ในตัวจัดการวิธีการคุณจะต้องรับผิดชอบในการจัดการการตอบกลับ เมื่อทำเช่นนั้นคุณต้องออกคำตอบบางอย่างโดยการโทรหาวัตถุตอบสนอง (เช่น res.json(...) หรือ res.send(...) ) หรือเซิร์ฟเวอร์ HTTP จะแขวน