下面我们定义一个删除内容用的接口。打开项目里的 post.service,先在这个服务里定义一个可以删除数据仓库里的内容用的函数。export 一个函数,名字叫 deletePost,这个函数是个异步函数,用 async 标记一下。
函数接收一个 postId 参数,类型是 number,这个 postId 就是要删除掉的内容在数据表里的 ID 栏目的值。
在函数的主体里面先准备一段 SQL 语句,添加一个 statement,用一个字符模板准备这段 SQL 。在数据仓库里删除内容可以使用 DELETE ,FROM post,要删除的是 post 表里的内容。
再用 WHERE 设置一个条件。条件是 id 等于一个具体的值,这里先用 ? 号表示,执行这段 SQL 的时候要提供这个 id 的值。
const 方括号,data,把执行结果里的第一个项目解构出来,起个名字叫 data,await 用一下 connection 上的 promise 方法,接着再用 query 方法,把要执行的 SQL 交给它,这里就是上面定义的 statement,这段 SQL 里面有个 ? 号,要给它设置具体的值,让它作为 query 方法的第二个参数,这里可以使用 postId,就是这 deletePost 函数接收的这个参数。
最后再让这个函数提供点数据,让它 return 上面的这个 data。
打开 post.controller,在这里定义删除内容接口用的处理器,导出一个函数,名字叫 destroy,它是一个异步函数,用 async 标记一下,用箭头函数的写法定义这个函数。处理器里面有几个参数,一个是 request,类型是 Request,还有一个 response 类型是 Response,还有一个 next 类型是 NextFunction。
在这个函数的主体里面,先获取到要删除掉的内容的 ID,这个 ID 可以从地址参数里面提取出来 const,postId,等于 request.params。
下面要执行删除内容,用一组 try catch ,把要做的事情放在 try 这里,添加一个 data, await 执行一下 deletePost,编辑器会自动从 post.service 里面导入这个 deletePost
执行它的时候要提供一个内容 ID 参数,用 parseInt 转换一下 postId,把它转换成 10 进制的数字。
然后用 response.send 做出一个响应,响应的数据是 data。
发生的异常情况可以在 catch 里面处理一下,执行 next 函数,带着发生的错误。这样这个异常会交给应用的默认的异常处理器处理。
再打开 post.router,在这里要定义一下 删除内容 接口, 用的是 router 上的 delete 方法,这个方法可以定义支持 HTTP 的 DELETE 方法使用的接口。接口的地址是 /posts 后面加上一个 :postId 参数。接口的处理器设置成 postController.destroy