梳理一下基本的思路

目标

评论拥有的字段

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

目标功能

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

用JS实现一次

// 先用js实现一次
// 首页
router.get('/', async (ctx) => {
  ctx.body = {
    code: 0,
    msg: 'success'
  }
})

// 新增接口
router.post('/add', async (ctx) => {
  // 接受参数
  /**
     * url: 主题 必填
     * content: 评论内容 必填
     * email: 用户邮箱 必填
     */
  const body = ctx.request.body
  if (!body.url) {
    ctx.body = {
      code: 1,
      msg: '参数错误'
    }
  }
  if (!body.content) {
    ctx.body = {
      code: 1,
      msg: '参数错误'
    }
  }
  if (!body.email) {
    ctx.body = {
      code: 1,
      msg: '参数错误'
    }
  }
  // 补充创建时间
  body.create = new Date()
  let postRepository = connection.getRepository(Post)
  let post = postRepository.create(body)
  let result = await postRepository.save(post)
  ctx.body = {
    code: 0,
    msg: 'success',
    data: result
  }
})

// 获取列表
router.get('/list', async (ctx) => {
  const postRepository = connection.getRepository(Post)
  const posts = await postRepository.find()
  ctx.body = {
    code: 0,
    msg: 'success',
    data: posts
  }
})

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

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