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服务器将悬挂。