# 创建微博
# 建立模型
const seq = require('../seq')
const { INTEGER, STRING, TEXT } = require('../types')
const Blog = seq.define('blog', {
userId: {
type: INTEGER,
allowNull: false,
comment: '用户 ID'
},
content: {
type: TEXT,
allowNull: false,
comment: '微博内容'
},
image: {
type: STRING,
comment: '图片地址'
}
})
module.exports = Blog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 关联博客表和用户表外键
const User = require('./User')
const Blog = require('./Blog')
Blog.belongsTo(User, {
foreignKey: 'userId'
})
1
2
3
4
5
6
7
2
3
4
5
6
7
# api
const router = require('koa-router')()
const { loginCheck } = require('../../middlewares/loginChecks')
const { create } = require('../../controller/blog-home')
const { genValidator } = require('../../middlewares/validator')
const blogValidate = require('../../validator/blog')
router.prefix('/api/blog')
// 创建微博
router.post('/create', loginCheck, genValidator(blogValidate), async (ctx, next) => {
const { content, image } = ctx.request.body
const { id: userId } = ctx.session.userInfo
ctx.body = await create({ userId, content, image })
})
module.exports = router
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# controller
const xss = require('xss')
const { createBlog } = require('../services/blog')
const { SuccessModel, ErrorModel } = require('../model/ResModel')
const { createBlogFailInfo } = require('../model/ErrorInfo')
/**
* 创建微博
* @param {Object} param0 创建微博所需的数据 { userId, content, image }
*/
async function create({ userId, content, image }) {
try {
// 创建微博
const blog = await createBlog({
userId,
content: xss(content),
image
})
// 返回
return new SuccessModel(blog)
} catch (ex) {
console.error(ex.message, ex.stack)
return new ErrorModel(createBlogFailInfo)
}
}
module.exports = {
create
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# services
const { Blog, User, UserRelation } = require('../db/model/index')
const { formatUser, formatBlog } = require('./_format')
/**
* 创建微博
* @param {Object} param0 创建微博的数据 { userId, content, image }
*/
async function createBlog({ userId, content, image }) {
const result = await Blog.create({
userId,
content,
image
})
return result.dataValues
}
module.exports = {
createBlog
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 测试用例
const server = require('../server')
const { Z_COOKIE } = require('../testUserInfo')
// 存储微博 id
let BLOG_ID = ''
test('创建一条微博,应该成功', async () => {
// 定义测试内容
const content = '单元测试自动创建的微博_' + Date.now()
const image = '/xxx.png'
// 开始测试
const res = await server
.post('/api/blog/create')
.send({
content,
image
})
.set('cookie', Z_COOKIE)
expect(res.body.errno).toBe(0)
expect(res.body.data.content).toBe(content)
expect(res.body.data.image).toBe(image)
// 记录微博 id
BLOG_ID = res.body.data.id
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27