Skip to content

Commit 4f8efb9

Browse files
committed
feat: init
0 parents  commit 4f8efb9

File tree

157 files changed

+3387
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

157 files changed

+3387
-0
lines changed

backend/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
node_modules

backend/_db.json

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
{
2+
"user": [
3+
{
4+
"username": "admin",
5+
"password": "dc483e80a7a0bd9ef71d8cf973673924",
6+
"createDate": "2016-12-08"
7+
},
8+
{
9+
"username": "test",
10+
"password": "e10adc3949ba59abbe56e057f20f883e",
11+
"createDate": "5/2/2017"
12+
}
13+
],
14+
"questionnaires": [
15+
{
16+
"title": "关于 Angular 2 在 2016 的发展现状调查",
17+
"starter": "关于在 2016 年 9 月中旬,Google 官方正式发布了 Angular 2 版本后的一些问卷调查",
18+
"ending": "",
19+
"state": 1,
20+
"questionList": [
21+
{
22+
"title": "如何评价 Angular 2.0 Final Release 的发布?",
23+
"type": 0,
24+
"answer": ""
25+
},
26+
{
27+
"title": "你会在下一个项目中考虑使用 Angular 2 吗?",
28+
"type": 1,
29+
"options": [
30+
{
31+
"key": 0,
32+
"value": ""
33+
},
34+
{
35+
"key": 1,
36+
"value": "不会"
37+
}
38+
],
39+
"answer": ""
40+
},
41+
{
42+
"title": "Angular 2 中数据状态管理方案有哪些?",
43+
"type": 0,
44+
"answer": ""
45+
},
46+
{
47+
"title": "Angular 2.0与 Angular1.x 版本相比,有哪些方面的改进呢?",
48+
"type": 3,
49+
"answer": ""
50+
},
51+
{
52+
"title": "Angular 2 能兼容到 IE 的什么版本?",
53+
"type": 2,
54+
"options": [
55+
{
56+
"key": 0,
57+
"value": "IE8 及以下版本"
58+
},
59+
{
60+
"key": 1,
61+
"value": "IE9"
62+
},
63+
{
64+
"key": 2,
65+
"value": "IE10"
66+
},
67+
{
68+
"key": 3,
69+
"value": "IE11"
70+
}
71+
],
72+
"answer": {
73+
"selected": []
74+
}
75+
},
76+
{
77+
"title": "TypeScript 会不会借着 Angular,成为主流编程语言?",
78+
"type": 1,
79+
"options": [
80+
{
81+
"key": 0,
82+
"value": ""
83+
},
84+
{
85+
"key": 1,
86+
"value": "不会"
87+
}
88+
],
89+
"answer": ""
90+
},
91+
{
92+
"title": "关于如何正确的学习 Angular 2 的思考,您有哪些建议 ?",
93+
"type": 0,
94+
"answer": ""
95+
}
96+
],
97+
"id": "eb988080-bdb1-11e6-9040-db60cb4931b1",
98+
"createDate": "2016-12-01"
99+
},
100+
{
101+
"title": "关于 2016 谷歌开发者大会在北京和上海召开的相关问卷调查",
102+
"starter": "",
103+
"ending": "",
104+
"state": 1,
105+
"questionList": [],
106+
"id": "b0b4d4b0-bdb5-11e6-8153-af1293d9eace",
107+
"createDate": "2016-12-08"
108+
},
109+
{
110+
"title": "Angular 2 对于 TypeScript 的生态建设影响的相关调查",
111+
"starter": "",
112+
"ending": "",
113+
"state": 0,
114+
"questionList": [],
115+
"id": "19655e30-bdb6-11e6-8153-af1293d9eace",
116+
"createDate": "2016-12-09"
117+
},
118+
{
119+
"title": "fdsg",
120+
"starter": "efwdsg",
121+
"ending": "",
122+
"state": 0,
123+
"questionList": [
124+
{
125+
"title": "问题标题fewgewfefewgew",
126+
"type": 0,
127+
"answer": ""
128+
}
129+
],
130+
"id": "691dd290-3e99-11e7-95ac-21877dadc395",
131+
"createDate": "5/22/2017"
132+
}
133+
]
134+
}

backend/app.js

Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
const jsonServer = require('json-server');
2+
const uuid = require('node-uuid');
3+
const crypto = require('crypto');
4+
const bodyParser = require('body-parser');
5+
const low = require('lowdb');
6+
const storage = require('lowdb/file-async');
7+
8+
// import jsonServer from 'json-server';
9+
// import uuid from 'node-uuid';
10+
// import bodyParser from 'body-parser';
11+
12+
// import low from 'lowdb';
13+
// import storage from 'lowdb/file-async';
14+
15+
16+
//创建一个Express服务器
17+
const server = jsonServer.create();
18+
19+
//使用json-server默认选择的中间件(logger,static, cors和no-cache)
20+
server.use(jsonServer.defaults());
21+
22+
//使用body-parser中间件
23+
server.use(bodyParser.json());
24+
25+
26+
//数据文件
27+
const dbfile = process.env.prod === '1' ? 'db.json' : '_db.json';
28+
29+
//创建一个lowdb实例
30+
const db = low(dbfile, {storage});
31+
32+
33+
const md5 = str => crypto
34+
.createHash('md5')
35+
.update(str.toString())
36+
.digest('hex');
37+
38+
//添加新问卷
39+
server.post('/questionnaire/add', (req, res) => {
40+
const item = req.body;
41+
item.id = uuid.v1();
42+
item.createDate = new Date().toLocaleDateString();
43+
db('questionnaires').push(item).then(() => {
44+
res.json({'success':true, data:item});
45+
});
46+
});
47+
48+
//删除已有问卷
49+
server.get('/questionnaire/delete/:id', (req, res)=>{
50+
db('questionnaires').remove({id: req.params.id}).then(()=>{
51+
res.json({'success': true});
52+
});
53+
});
54+
55+
//获取所有问卷
56+
server.get('/questionnaires', (req, res) => {
57+
const questionnaires = db('questionnaires');
58+
res.json({'success':true, data:questionnaires});
59+
});
60+
61+
//根据id获取问卷数据
62+
server.get('/questionnaire/:id', (req, res) => {
63+
const questionnaire = db('questionnaires').find({id: req.params.id});
64+
res.json({'success':true, data:questionnaire});
65+
});
66+
67+
//更新已有问卷
68+
server.post('/questionnaire/update', (req, res) => {
69+
const item = req.body;
70+
db('questionnaires').chain().find({id:item.id}).assign(item).value();
71+
res.json({'success':true, data:item});
72+
});
73+
74+
//发布问卷
75+
server.post('/questionnaire/updateState', (req, res)=>{
76+
const params = req.body;
77+
const item = db('questionnaires').chain().find({id:params.id});
78+
item.assign({state:params.state}).value();
79+
res.json({'success':true, data:item});
80+
});
81+
82+
// get userinfo
83+
server.get('/user/:username', (req, res) => {
84+
const user = db('user')
85+
.find({
86+
username: req.params.username
87+
});
88+
89+
res.json({
90+
success: true,
91+
data: {
92+
username: user.username,
93+
createDate: user.createDate
94+
}
95+
});
96+
});
97+
98+
// register
99+
server.post('/user/add', (req, res) => {
100+
const item = req.body;
101+
const user = db('user')
102+
.find({
103+
username: item.username
104+
});
105+
if (user) {
106+
res.json({
107+
success: false,
108+
message: `"${item.username}" is exists`
109+
})
110+
} else {
111+
item.password = md5(item.password);
112+
item.createDate = new Date().toLocaleDateString();
113+
db('user')
114+
.push(item)
115+
.then(() => {
116+
res.json({
117+
success: true
118+
});
119+
});
120+
}
121+
});
122+
123+
// login
124+
server.post('/login', (req, res) => {
125+
const data = req.body || {};
126+
const username = data.username;
127+
const user = db('user')
128+
.find({
129+
username
130+
});
131+
132+
if (user && user.password === md5(data.password)) {
133+
// todo reset session
134+
res.json({
135+
success: true
136+
});
137+
} else {
138+
res.json({
139+
success: false,
140+
message: 'username or password error'
141+
});
142+
}
143+
});
144+
145+
//路由配置
146+
const router = jsonServer.router(dbfile);
147+
server.use('/api', router);
148+
149+
//启动服务,并监听5000端口
150+
server.listen(5000, () => {
151+
console.log('server is running at ', 5000, dbfile);
152+
});

backend/package.json

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
"name": "server",
3+
"version": "1.0.0",
4+
"description": "",
5+
"main": "app.js",
6+
"scripts": {
7+
"test": "echo \"Error: no test specified\" && exit 1"
8+
},
9+
"author": "",
10+
"license": "ISC",
11+
"dependencies": {
12+
"body-parser": "^1.14.2",
13+
"json-server": "^0.8.7",
14+
"lowdb": "^0.12.2",
15+
"node-uuid": "^1.4.7"
16+
}
17+
}

frontend/.angular-cli.json

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
{
2+
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
3+
"project": {
4+
"name": "ng2demo-cli"
5+
},
6+
"apps": [
7+
{
8+
"root": "src",
9+
"outDir": "dist",
10+
"assets": [
11+
"assets",
12+
"favicon.ico"
13+
],
14+
"index": "index.html",
15+
"main": "main.ts",
16+
"polyfills": "polyfills.ts",
17+
"test": "test.ts",
18+
"tsconfig": "tsconfig.app.json",
19+
"testTsconfig": "tsconfig.spec.json",
20+
"prefix": "app",
21+
"styles": [
22+
"../node_modules/bootstrap/dist/css/bootstrap.min.css",
23+
"styles.css"
24+
],
25+
"scripts": [],
26+
"environmentSource": "environments/environment.ts",
27+
"environments": {
28+
"dev": "environments/environment.ts",
29+
"prod": "environments/environment.prod.ts"
30+
}
31+
}
32+
],
33+
"e2e": {
34+
"protractor": {
35+
"config": "./protractor.conf.js"
36+
}
37+
},
38+
"lint": [
39+
{
40+
"project": "src/tsconfig.app.json"
41+
},
42+
{
43+
"project": "src/tsconfig.spec.json"
44+
},
45+
{
46+
"project": "e2e/tsconfig.e2e.json"
47+
}
48+
],
49+
"test": {
50+
"karma": {
51+
"config": "./karma.conf.js"
52+
}
53+
},
54+
"defaults": {
55+
"styleExt": "css",
56+
"component": {}
57+
}
58+
}

frontend/.editorconfig

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# Editor configuration, see http://editorconfig.org
2+
root = true
3+
4+
[*]
5+
charset = utf-8
6+
indent_style = space
7+
indent_size = 2
8+
insert_final_newline = true
9+
trim_trailing_whitespace = true
10+
11+
[*.md]
12+
max_line_length = off
13+
trim_trailing_whitespace = false

frontend/.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
node_modules
2+
.vscode
3+
.DS_Store

0 commit comments

Comments
 (0)