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の次のAPI-Decoratorsを使用したAwest.js APIルートをチェックしてください。
https://next-api-decorators.vercel.app/docs/#installationにアクセスして、開始してください。
使用法については、ドキュメントを参照してください。
検証
ルートマッチング
ミドルウェアを使用します
カスタムミドルウェア
パイプ
例外
| 説明 | |
|---|---|
@SetHeader(name: string, value: string) | クラスで定義されているすべてのルートにヘッダー名/値を設定します。 |
@UseMiddleware(...middlewares: Middleware[]) | クラスで定義されているすべてのルートの1つまたは複数のミドルウェアを登録します。 |
| 説明 | |
|---|---|
@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[]) | ハンドラーの1つまたは複数のミドルウェアを登録します。 |
| 説明 | |
|---|---|
@Req() | リクエストオブジェクトを取得します。 |
@Res() * | 応答オブジェクトを取得します。 |
@Body() | リクエスト本文を取得します。 |
@Query(key: string) | キーでクエリ文字列パラメーター値を取得します。 |
@Header(name: string) | 名前でヘッダー値を取得します。 |
@Param(key: string) | キーごとにルートパラメーター値を取得します。 |
*メソッドハンドラーに@Res()を挿入すると、応答の管理に責任があることに注意してください。そうする場合、応答オブジェクト( res.json(...)またはres.send(...) )を呼び出すことにより、何らかの応答を発行する必要があります。または、HTTPサーバーがハングします。