next api decorators
v2.0.2
查看文檔
// 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代碼庫帶來訂單和理智。
該結構受到Nestjs的啟發,這是許多用例的驚人框架。另一方面,您的後端單獨的Nestjs回購還可以為具有較小的後端要求集的項目帶來不需要的開銷和復雜性。將Nestjs的結構結合起來,易於使用Next.js,為正確的用例帶來了兩全其美的世界。
如果您不熟悉Next.js或Nestjs,並且想要更多信息(或需要說服),請通過@tpjnorton查看Next.js API路由的文章。
請訪問https://next-api-decorators.vercel.app/docs/#installation開始。
請參閱我們的文檔以獲取使用主題:
驗證
路線匹配
使用中間
自定義中間
管道
例外
| 描述 | |
|---|---|
@SetHeader(name: string, value: string) | 將標題名稱/值設置為類中定義的所有路由。 |
@UseMiddleware(...middlewares: Middleware[]) | 為班級定義的所有路線登記一個或多個中間。 |
| 描述 | |
|---|---|
@Get(path?: string) | 將方法標記為GET Handler。 |
@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服務器將懸掛。