目标

评论拥有的字段

_id: objectid
url: 主题 必填
content: 评论内容 必填
email: 用户邮箱 必填
create: 创建时间

目标功能

  1. 添加
  2. 通过主题查询主题相关的所有评论
  3. 测试页面

用JS实现一次

  1. // 先用js实现一次
  2. // 首页
  3. router.get('/', async (ctx) => {
  4. ctx.body = {
  5. code: 0,
  6. msg: 'success'
  7. }
  8. })
  9. // 新增接口
  10. router.post('/add', async (ctx) => {
  11. // 接受参数
  12. /**
  13. * url: 主题 必填
  14. * content: 评论内容 必填
  15. * email: 用户邮箱 必填
  16. */
  17. const body = ctx.request.body
  18. if (!body.url) {
  19. ctx.body = {
  20. code: 1,
  21. msg: '参数错误'
  22. }
  23. }
  24. if (!body.content) {
  25. ctx.body = {
  26. code: 1,
  27. msg: '参数错误'
  28. }
  29. }
  30. if (!body.email) {
  31. ctx.body = {
  32. code: 1,
  33. msg: '参数错误'
  34. }
  35. }
  36. // 补充创建时间
  37. body.create = new Date()
  38. let postRepository = connection.getRepository(Post)
  39. let post = postRepository.create(body)
  40. let result = await postRepository.save(post)
  41. ctx.body = {
  42. code: 0,
  43. msg: 'success',
  44. data: result
  45. }
  46. })
  47. // 获取列表
  48. router.get('/list', async (ctx) => {
  49. const postRepository = connection.getRepository(Post)
  50. const posts = await postRepository.find()
  51. ctx.body = {
  52. code: 0,
  53. msg: 'success',
  54. data: posts
  55. }
  56. })

观察一下,改造成TS我们应该怎么做

  1. 很明显的是我们返回的数据格式是固定的(code, msg, data),只有data的类型是不固定的,所以就可以用一个 interface来约束一下
  2. add的时候,接受得参数是什么貌似也没有约束,最起码看不到,过几天就会忘记了
  3. 如果路由得一个个写,10个以内得接口还可以接受,再多就要疯了