定义一个可以删除内容用的接口。在终端,项目所在目录的下面,执行 nest generate controller 生成一个控制器,名字是 post-destroy ,放在 post/modules/destroy/controllers 里面,加上一个 --flat 选项。再生成一个删除内容用的命令,执行 npm run gc delete-post 放在 post/modules/destroy/commands 里面。
回到项目,打开 DeletePostCommand 命令,在命令参数里面添加一个 id,类型是 number。打开命令对应的处理器,在构造方法里注入一个 Repository 依赖,实体类型是 PostEntity,名字是 postRepository,然后分别导入需要的 这些东西。
在 execute 方法里面,解构一下命令参数,需要的是 id,来自 command.params 。return 的东西可以执行一下 this.postRepository.delete 这个方法,提供一个 id ,它会把指定 id 的 post 删除掉。
删除内容接口
打开 PostDestroyController ,去掉 Controller 装饰器的参数值,在控制器里添加一个构造方法,然后注入一个 CommandBus 依赖。下面定义一个接口,用 @Delete 装饰一下,地址是 posts/:postId ,方法的名字可以是 deletePost ,方法里面用 @Param 装饰器,得到 postId 这个地址参数的值,再用 ParseIntPipe 转换成数字,交给 postId 参数,类型是 number。方法 return 的东西可以执行一个命令,新建一个 DeletePostCommand 命令,提供一个对象,里面有个 id ,值是 postId。
测试
在 Http 客户端,测试一下,先打开创建内容这个请求,发送一下这个请求,新创建一个内容,然后在数据库客户端观察一下,这里显示刚才创建的内容的 id 是 2 。
回到 Http 客户端,复制一份更新内容请求,名字是删除内容,把请求的方法改成 Delete,地址是 posts,要删除的内容的 id 是 2 ,请求主体可以为空。发送一下这个请求,成功以后,在数据库客户端观察一下,你会发现刚才新创建的内容已经被删除掉了。