目标
评论拥有的字段
_id: objectid
url: 主题 必填
content: 评论内容 必填
email: 用户邮箱 必填
create: 创建时间
目标功能
- 添加
- 通过主题查询主题相关的所有评论
- 测试页面
用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我们应该怎么做
- 很明显的是我们返回的数据格式是固定的(code, msg, data),只有data的类型是不固定的,所以就可以用一个 interface来约束一下
- add的时候,接受得参数是什么貌似也没有约束,最起码看不到,过几天就会忘记了
- 如果路由得一个个写,10个以内得接口还可以接受,再多就要疯了