Skip to content

Commit e06f475

Browse files
添加项目展示模块
1 parent b0003e1 commit e06f475

5 files changed

Lines changed: 1269 additions & 883 deletions

File tree

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@ blog-node 是采用了主流的前后端分离思想的,主里只讲 后端。
2323
- [x] 友情链接管理
2424
- [x] 时间轴管理
2525
- [x] 身份验证
26+
- [x] 项目展示
2627

2728
## 1.2 待实现功能
2829

29-
- [ ] 点赞、留言和评论 的通知管理
3030
- [ ] 个人中心(用来设置博主的各种信息)
3131
- [ ] 工作台( 接入百度统计接口,查看网站浏览量和用户访问等数据 )
3232

@@ -87,7 +87,7 @@ npm start
8787

8888
# 9. 参考
8989

90-
小汪也是第一次搭建 node 后端项目,也参考了其他项目。
90+
小汪是刚学的 node 技术栈,也是第一次搭建 node 后端项目,也参考了其他项目。
9191

9292
参考项目:
9393
[1. nodepress](https://github.com/surmon-china/nodepress)

models/project.js

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/**
2+
* Project model module.
3+
* @file 项目模型
4+
* @module model/project
5+
* @author biaochenxuying <https://github.com/biaochenxuying>
6+
*/
7+
8+
const { mongoose } = require('../core/mongodb.js');
9+
const autoIncrement = require('mongoose-auto-increment');
10+
11+
// 项目模型
12+
const projectSchema = new mongoose.Schema({
13+
// 标题
14+
title: { type: String, required: true },
15+
16+
// 项目内容
17+
content: { type: String, required: true },
18+
19+
// 项目封面
20+
img: { type: String, required: true },
21+
22+
// 项目链接
23+
url: { type: String, required: true },
24+
25+
// 状态 1 是已经完成 ,2 是正在进行,3 是没完成
26+
state: { type: Number, default: 1 },
27+
28+
// 开始日期
29+
start_time: { type: Date, default: Date.now },
30+
31+
// 结束日期
32+
end_time: { type: Date, default: Date.now },
33+
34+
// 最后修改日期
35+
update_time: { type: Date, default: Date.now },
36+
});
37+
38+
// 自增ID插件配置
39+
projectSchema.plugin(autoIncrement.plugin, {
40+
model: 'Project',
41+
field: 'id',
42+
startAt: 1,
43+
incrementBy: 1,
44+
});
45+
46+
// 项目模型
47+
module.exports = mongoose.model('Project', projectSchema);

routes/index.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ const tag = require('./tag');
99
const link = require('./link');
1010
const category = require('./category');
1111
const timeAxis = require('./timeAxis');
12+
const project = require('./project');
1213

1314
module.exports = app => {
1415
app.post('/login', user.login);
@@ -57,4 +58,10 @@ module.exports = app => {
5758
app.post('/delTimeAxis', timeAxis.delTimeAxis);
5859
app.get('/getTimeAxisList', timeAxis.getTimeAxisList);
5960
app.post('/getTimeAxisDetail', timeAxis.getTimeAxisDetail);
61+
62+
app.post('/addProject', project.addProject);
63+
app.post('/updateProject', project.updateProject);
64+
app.post('/delProject', project.delProject);
65+
app.get('/getProjectList', project.getProjectList);
66+
app.post('/getProjectDetail', project.getProjectDetail);
6067
};

routes/project.js

Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
import { responseClient } from '../util/util';
2+
import Project from '../models/project';
3+
4+
//获取全部项目内容
5+
exports.getProjectList = (req, res) => {
6+
let keyword = req.query.keyword || null;
7+
let state = req.query.state || '';
8+
let pageNum = parseInt(req.query.pageNum) || 1;
9+
let pageSize = parseInt(req.query.pageSize) || 10;
10+
let conditions = {};
11+
if (!state) {
12+
if (keyword) {
13+
const reg = new RegExp(keyword, 'i'); //不区分大小写
14+
conditions = {
15+
$or: [{ title: { $regex: reg } }, { content: { $regex: reg } }],
16+
};
17+
}
18+
} else if (state) {
19+
state = parseInt(state);
20+
if (keyword) {
21+
const reg = new RegExp(keyword, 'i');
22+
conditions = {
23+
$and: [
24+
{ $or: [{ state: state }] },
25+
{ $or: [{ title: { $regex: reg } }, { content: { $regex: reg } }] },
26+
],
27+
};
28+
} else {
29+
conditions = { state };
30+
}
31+
}
32+
33+
let skip = pageNum - 1 < 0 ? 0 : (pageNum - 1) * pageSize;
34+
let responseData = {
35+
count: 0,
36+
list: [],
37+
};
38+
Project.countDocuments(conditions, (err, count) => {
39+
if (err) {
40+
console.error('Error:' + err);
41+
} else {
42+
responseData.count = count;
43+
let fields = {
44+
title: 1,
45+
content: 1,
46+
img: 1,
47+
url: 1,
48+
state: 1,
49+
start_time: 1,
50+
end_time: 1,
51+
update_time: 1,
52+
}; // 待返回的字段
53+
let options = {
54+
skip: skip,
55+
limit: pageSize,
56+
sort: { end_time: -1 },
57+
};
58+
Project.find(conditions, fields, options, (error, result) => {
59+
if (err) {
60+
console.error('Error:' + error);
61+
// throw error;
62+
} else {
63+
responseData.list = result;
64+
responseClient(res, 200, 0, '操作成功!', responseData);
65+
}
66+
});
67+
}
68+
});
69+
};
70+
71+
exports.addProject = (req, res) => {
72+
let { title, state, content, img, url, start_time, end_time } = req.body;
73+
Project.findOne({
74+
title,
75+
})
76+
.then(result => {
77+
if (!result) {
78+
let project = new Project({
79+
title,
80+
state,
81+
content,
82+
img,
83+
url,
84+
start_time,
85+
end_time,
86+
});
87+
project
88+
.save()
89+
.then(data => {
90+
responseClient(res, 200, 0, '操作成功!', data);
91+
})
92+
.catch(err => {
93+
console.error('err :', err);
94+
// throw err;
95+
});
96+
} else {
97+
responseClient(res, 200, 1, '该项目内容已存在');
98+
}
99+
})
100+
.catch(errro => {
101+
console.error('errro :', errro);
102+
responseClient(res);
103+
});
104+
};
105+
106+
exports.updateProject = (req, res) => {
107+
let { id, title, state, content,img, url, start_time, end_time } = req.body;
108+
109+
Project.updateOne(
110+
{ _id: id },
111+
{
112+
title,
113+
state: Number(state),
114+
content,
115+
img,
116+
url,
117+
start_time,
118+
end_time,
119+
update_time: new Date(),
120+
},
121+
)
122+
.then(result => {
123+
// console.log(result);
124+
responseClient(res, 200, 0, '操作成功', result);
125+
})
126+
.catch(err => {
127+
console.error('err:', err);
128+
responseClient(res);
129+
});
130+
};
131+
132+
exports.delProject = (req, res) => {
133+
let { id } = req.body;
134+
Project.deleteMany({ _id: id })
135+
.then(result => {
136+
// console.log('result :', result)
137+
if (result.n === 1) {
138+
responseClient(res, 200, 0, '操作成功!');
139+
} else {
140+
responseClient(res, 200, 1, '项目内容不存在');
141+
}
142+
})
143+
.catch(err => {
144+
console.error('err :', err);
145+
responseClient(res);
146+
});
147+
};
148+
149+
// 详情
150+
exports.getProjectDetail = (req, res) => {
151+
let { id } = req.body;
152+
Project.findOne({ _id: id })
153+
.then(data => {
154+
responseClient(res, 200, 0, '操作成功!', data);
155+
})
156+
.catch(err => {
157+
console.error('err :', err);
158+
responseClient(res);
159+
});
160+
};

0 commit comments

Comments
 (0)