Skip to content

Commit 6bba433

Browse files
committed
#24 added first version of backend for my project. Use mongodb, express, nodemon, nodejs and other packages. Authorization, console registration, api(get,post,put,delete). Also done: adding, deleting and viewing articles, works and skills through the admin panel. Added - delete, add and modify through api. Output of data to the site (via api or pug).
1 parent 1a03e6d commit 6bba433

Some content is hidden

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

75 files changed

+5203
-1578
lines changed

adduser.js

+63
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
const mongoose = require('mongoose');
2+
const readline = require('readline');
3+
const rl = readline.createInterface({
4+
input: process.stdin,
5+
output: process.stdout
6+
});
7+
8+
const config = require('./config/config');
9+
mongoose.Promise = global.Promise;
10+
mongoose
11+
.connect(`mongodb://${config.db.host}:${config.db.port}/${config.db.name}`, {
12+
useMongoClient: true
13+
})
14+
.catch(e => {
15+
console.error(e);
16+
throw e;
17+
});
18+
19+
//логин и пароль, изначально пустые
20+
let login = '',
21+
password = '';
22+
23+
//спрашиваем логин
24+
rl.question('Логин: ', answer => {
25+
//записываем введенный логин
26+
login = answer;
27+
28+
//спрашиваем пароль
29+
rl.question('Пароль: ', answer => {
30+
//записываем введенный пароль
31+
password = answer;
32+
33+
//завершаем ввод
34+
rl.close();
35+
});
36+
});
37+
38+
//когда ввод будет завершен
39+
rl.on('close', () => {
40+
//подключаем модель пользователя
41+
require('./api/models/user');
42+
//создаем экземпляр пользователя и указываем введенные данные
43+
const User = mongoose.model('user');
44+
const adminUser = new User({ login: login });
45+
adminUser.setPassword(password);
46+
//пытаемся найти пользователя с таким логином
47+
User.findOne({ login: login })
48+
.then(u => {
49+
//если такой пользователь уже есть - сообщаем об этом
50+
if (u) {
51+
throw new Error('Такой пользователь уже существует!');
52+
}
53+
54+
//если нет - добавляем пользователя в базу
55+
return adminUser.save();
56+
})
57+
.then(u => console.log('ok!'), e => console.error(e.message))
58+
.then(() =>
59+
mongoose.connection.close(function() {
60+
process.exit(0);
61+
})
62+
);
63+
});

api/controllers/blog.js

+89
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
const mongoose = require('mongoose');
2+
3+
module.exports.getArticles = (req, res) => {
4+
const Blog = mongoose.model('blog');
5+
6+
Blog.find().then(items => {
7+
res.status(200).json({
8+
articles: items
9+
});
10+
});
11+
};
12+
module.exports.createArticle = (req, res) => {
13+
const Model = mongoose.model('blog');
14+
15+
let item = new Model({
16+
title: req.body.title,
17+
date: new Date(req.body.date),
18+
body: req.body.text,
19+
code: req.body.code
20+
});
21+
22+
item
23+
.save()
24+
.then(item => {
25+
return res.status(201).json({
26+
message: 'Запись успешно добавлена'
27+
});
28+
})
29+
.catch(err => {
30+
res.status(400).json({
31+
message: `При добавление записи произошла ошибка: + ${err.message}`
32+
});
33+
});
34+
};
35+
36+
module.exports.editArticle = (req, res) => {
37+
const id = req.body.id;
38+
let data = {
39+
title: req.body.title,
40+
date: new Date(req.body.date),
41+
body: req.body.text,
42+
code: req.body.code
43+
};
44+
45+
const Model = mongoose.model('blog');
46+
47+
Model.findByIdAndUpdate(id, {
48+
$set: data
49+
})
50+
.then(item => {
51+
if (!!item) {
52+
res.status(200).json({
53+
message: 'Запись успешно обновлена'
54+
});
55+
} else {
56+
res.status(404).json({
57+
message: 'Запись в БД не обнаружена'
58+
});
59+
}
60+
})
61+
.catch(err => {
62+
res.status(400).json({
63+
message: `При обновлении записи произошла ошибка: + ${err.message}`
64+
});
65+
});
66+
};
67+
68+
module.exports.deleteArticle = (req, res) => {
69+
const id = req.body.id;
70+
const Model = mongoose.model('blog');
71+
72+
Model.findByIdAndRemove(id)
73+
.then(item => {
74+
if (!!item) {
75+
res.status(200).json({
76+
message: 'Запись успешно удалена'
77+
});
78+
} else {
79+
res.status(404).json({
80+
message: 'Запись в БД не обнаружена'
81+
});
82+
}
83+
})
84+
.catch(err => {
85+
res.status(400).json({
86+
message: `При удалении записи произошла ошибка: ' + ${err.message}`
87+
});
88+
});
89+
};

api/controllers/skill.js

+86
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
const mongoose = require('mongoose');
2+
3+
module.exports.getSkill = (req, res) => {
4+
const skill = mongoose.model('skill');
5+
6+
skill.find().then(items => {
7+
res.status(200).json({
8+
articles: items
9+
});
10+
});
11+
};
12+
module.exports.createSkill = (req, res) => {
13+
const Model = mongoose.model('skill');
14+
let item = new Model({
15+
name: req.body.name,
16+
percents: req.body.percents,
17+
type: req.body.type
18+
});
19+
item
20+
.save()
21+
.then(item => {
22+
return res.status(201).json({
23+
message: 'Запись успешно добавлена'
24+
});
25+
})
26+
.catch(err => {
27+
res.status(400).json({
28+
message: `При добавление записи произошла ошибка: + ${err.message}`
29+
});
30+
});
31+
};
32+
33+
module.exports.editSkill = (req, res) => {
34+
const id = req.body.id;
35+
36+
let item = new Model({
37+
name: req.body.name,
38+
percents: req.body.percents,
39+
type: req.body.type
40+
});
41+
42+
const Model = mongoose.model('skill');
43+
44+
Model.findByIdAndUpdate(id, {
45+
$set: item
46+
})
47+
.then(item => {
48+
if (!!item) {
49+
res.status(200).json({
50+
message: 'Запись успешно обновлена'
51+
});
52+
} else {
53+
res.status(404).json({
54+
message: 'Запись в БД не обнаружена'
55+
});
56+
}
57+
})
58+
.catch(err => {
59+
res.status(400).json({
60+
message: `При обновлении записи произошла ошибка: + ${err.message}`
61+
});
62+
});
63+
};
64+
65+
module.exports.deleteSkill = (req, res) => {
66+
const id = req.body.id;
67+
const Model = mongoose.model('skill');
68+
69+
Model.findByIdAndRemove(id)
70+
.then(item => {
71+
if (!!item) {
72+
res.status(200).json({
73+
message: 'Запись успешно удалена'
74+
});
75+
} else {
76+
res.status(404).json({
77+
message: 'Запись в БД не обнаружена'
78+
});
79+
}
80+
})
81+
.catch(err => {
82+
res.status(400).json({
83+
message: `При удалении записи произошла ошибка: ' + ${err.message}`
84+
});
85+
});
86+
};

api/controllers/user.js

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
const mongoose = require('mongoose');
2+
module.exports.isAuth = function (req, res) {
3+
const Model = mongoose.model('user');
4+
Model
5+
.findOne({login: req.body.login})
6+
.then(user => {
7+
if (!user) {
8+
return res.status(404).json({status: 'err', message: 'Пользователя не существует'});
9+
}
10+
if (!user.validPassword(req.body.password)) {
11+
return res.status(400).json({status: 'err', message: 'Пароль введен неверно!'});
12+
} else {
13+
res.status(200).json({status: 'ok', message: 'Авторизация успешна!'});
14+
}
15+
}).catch(e => {
16+
res.status(400).json({
17+
status: 'err', message: 'Произошла ошибка: ' + e.message
18+
});
19+
});
20+
}

api/controllers/works.js

+111
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
const mongoose = require('mongoose');
2+
let fs = require('fs');
3+
let path = require('path');
4+
const formidable = require('formidable');
5+
6+
module.exports.getWork = (req, res) => {
7+
const work = mongoose.model('work');
8+
9+
work.find().then(items => {
10+
res.status(200).json({
11+
articles: items
12+
});
13+
});
14+
};
15+
16+
module.exports.createWork = (req, res) => {
17+
let form = new formidable.IncomingForm();
18+
let fileName;
19+
let upload = 'build/img/work';
20+
const Model = mongoose.model('work');
21+
form.uploadDir = path.join(process.cwd(), upload);
22+
form.parse(req, function (err, fields, files) {
23+
if (err) {
24+
return 'message:' + err
25+
}
26+
if (!fields.title) {
27+
fs.unlink(files.image.path);
28+
return res.status(400).json({
29+
message: `При добавление записи произошла ошибка: + ${err.message}`
30+
});
31+
}
32+
fileName = path.join(upload, files.image.name);
33+
fs.rename(files.image.path, fileName, function (err) {
34+
if (err) {
35+
fs.unlink(fileName);
36+
fs.rename(files.image.path, fileName);
37+
}
38+
let image = fileName.substr(fileName.indexOf('\\'));
39+
let item = new Model({
40+
title: fields.title,
41+
tech: fields.tech,
42+
image: image
43+
});
44+
item
45+
.save()
46+
.then(item => {
47+
return res.status(201).json({
48+
message: 'Запись успешно добавлена'
49+
});
50+
})
51+
.catch(err => {
52+
res.status(400).json({
53+
message: `При добавление записи произошла ошибка: + ${err.message}`
54+
});
55+
});
56+
});
57+
});
58+
};
59+
// не работает
60+
module.exports.editWork = (req, res) => {
61+
const id = req.body.id;
62+
let item = new Model({
63+
tech: req.body.tech,
64+
number: req.body.number,
65+
});
66+
67+
const Model = mongoose.model('work');
68+
69+
Model.findByIdAndUpdate(id, {
70+
$set: item
71+
})
72+
.then(item => {
73+
if (!!item) {
74+
res.status(200).json({
75+
message: 'Запись успешно обновлена'
76+
});
77+
} else {
78+
res.status(404).json({
79+
message: 'Запись в БД не обнаружена'
80+
});
81+
}
82+
})
83+
.catch(err => {
84+
res.status(400).json({
85+
message: `При обновлении записи произошла ошибка: + ${err.message}`
86+
});
87+
});
88+
};
89+
90+
module.exports.deleteWork = (req, res) => {
91+
const id = req.body.id;
92+
const Model = mongoose.model('work');
93+
94+
Model.findByIdAndRemove(id)
95+
.then(item => {
96+
if (!!item) {
97+
res.status(200).json({
98+
message: 'Запись успешно удалена'
99+
});
100+
} else {
101+
res.status(404).json({
102+
message: 'Запись в БД не обнаружена'
103+
});
104+
}
105+
})
106+
.catch(err => {
107+
res.status(400).json({
108+
message: `При удалении записи произошла ошибка: ' + ${err.message}`
109+
});
110+
});
111+
};

0 commit comments

Comments
 (0)