Просмотреть документы
// 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'
} ) ;
} Создание без серверных функций декларативно с классами и декораторами облегчает работу с маршрутами API next.js и приносит порядок и здравомыслие в ваш кодовой базу /pages/api .
Структура сильно вдохновлена NESTJS, которая является удивительной основой для многих вариантов использования. С другой стороны, отдельное репо для вашего бэкэнда также может принести ненужные накладные расходы и сложность в проекты с меньшим набором требований к бэкэнд. Объединение структуры NESTJ с легкостью использования следующего.js приносит лучшее из обоих миров для правильного варианта использования.
Если вы не знакомы с Next.js или Nestjs и хотите получить дополнительную информацию (или необходимо убежден), ознакомьтесь с статьей Awesome. Jest.js API маршруты со следующими-API-декораторами по @tpjnorton
Посетите https://next-api-decorators.vercel.app/docs/#installation, чтобы начать.
Обратитесь к нашим документам на темы использования:
Валидация
Маршрут сопоставление
Используя средние войны
Пользовательские средние войны
Трубы
Исключения
| Описание | |
|---|---|
@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 -сервер будет зависеть.