1、api
src/app/api 的作用是放置与前端组件通讯的接口文件,接口遵循 RESTful 接口模型,方法一般包含两个参数:request和 context
,代码一般如下:
import getCurrentUser from "@/app/actions/getCurrentUser";
import { NextResponse } from "next/server";
interface IParams {
reservationId?: string;
}
export async function DELETE(
request: Request,
{ params }: { params: IParams }
) {
const currentUser = await getCurrentUser();
if (!currentUser) {
return NextResponse.error();
}
const { reservationId } = params;
if(!reservationId || typeof reservationId !=="string"){
throw new Error("Invalid ID");
}
//预定者本人和房间拥有者可以删除
const reservation = await prisma?.reservation.deleteMany({
where:{
id:reservationId,
OR:[
{userId:currentUser.id},
{listing:{userId:currentUser.id}}
]
}
})
return NextResponse.json(reservation);
}
- DELETE 方法第一个参数是一个 request 对象,一般包含 url、query 参数、params 参数、method 等。
- DELETE 方法第二个参数是一个 context对象,
context
对象在不同的场景下可能包含不同的属性。以下是一些常见的属性和它们的用途:- **
params
**:- 包含路径参数。例如,在
/api/resource/[reservationId]
路由中,params
将包含{ reservationId: 'some_id' }
。
- 包含路径参数。例如,在
- **
req
**:- 原始的 Node.js
IncomingMessage
对象。包含了关于 HTTP 请求的详细信息。
- 原始的 Node.js
- **
res
**:- 原始的 Node.js
ServerResponse
对象。用于发送 HTTP 响应。
- 原始的 Node.js
- **
preview
**:- 一个布尔值,表示当前请求是否在预览模式下。
- **
previewData
**:- 预览模式下的数据。如果启用了预览模式,这个属性将包含预览数据。
- **
locale
**:- 当前请求的语言环境(locale)。在国际化(i18n)配置启用时可用。
- **
defaultLocale
**:- 默认的语言环境。在国际化(i18n)配置启用时可用。
- **
locales
**:- 可用的语言环境列表。在国际化(i18n)配置启用时可用。
- **
- deleteMany对应的 sql 语句是:
DELETE FROM reservations WHERE id = $1 AND (user_id = $2 OR listing_id IN (SELECT id FROM listings WHERE user_id = $2));
代表的意思是:预定者本人和房间拥有者可以删除预定项目