Дипломная работа: Автоматизация учета рабочего времени сотрудников компании "Альтерон"

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
76
12. Начало работы с Node.js [Электронный ресурс] [Офиц. сайт]. URL:
https://medium.com/devschacht/node-hero-chapter-1-239f7afeb1d1 (дата обращения:
05.11.2019).
13. Руководство по Node.js, часть 3: хостинг, REPL, работа с консолью,
модули. [Электронный ресурс] [Офиц. сайт]. URL:
https://habr.com/ru/company/ruvds/blog/423701/ (дата обращения: 14.10.2019).
14. Сравнение языков программирования и фреймворков для них.
[Электронный ресурс] [Офиц. сайт]. URL: https://habr.com/ru/post/275445/ (дата
обращения: 14.10.2019).
15. Типы систем управления базами данных и их преимущества.
[Электронный ресурс] [Офиц. сайт]. URL: http://juice-
health.ru/programming/database/460-dbms (дата обращения: 10.10.2019).
77
ПРИЛОЖЕНИЯ
ПРИЛОЖЕНИЕ 1. ЛИСТИНГ ПРОГРАММЫ
App/module:
const express = require('express');
const mongoose = require('mongoose');
const session = require('express-session');
const flash = require('connect-flash');
const passport = require('passport');
const cron = require('node-cron');
const screen = require('./config/screen');
const app = express();
// Passport config
require('./config/passport')(passport);
// Db Config
const db = require('./config/keys').MongoURI;
// Db connect
mongoose.connect(db, { useNewUrlParser: true,
useUnifiedTopology: true })
.then(() => console.log('MongoDB Connected...'))
.catch(err => console.log(err));
// View
app.set('view engine', 'pug');
app.use(express.static(__dirname + '/public'));
//Bodyparser
app.use(express.urlencoded({ extended: false }));
78
// Express Session
app.use(session({
secret: 'keyboard cat',
resave: true,
saveUninitialized: true,
}));
// Passport middleware
app.use(passport.initialize());
app.use(passport.session());
// Connect flash
app.use(flash());
// Global Vars
app.use((req, res, next) => {
res.locals.error = req.flash('error');
res.locals.success = req.flash('success');
next();
})
// Routes
app.use('/', require('./routes/index'));
const PORT = process.env.PORT || 5000;
app.listen(PORT, console.log(`Server started on port ${PORT}`));
module/index.js
const express = require('express');
const router = express.Router();
const passport = require('passport');
79
const User = require('../models/User');
const Session = require('../models/Sessions');
const smodule = require('../config/smodule');
const screen = require('../config/screen');
const cron = require('node-cron');
var task;
router.get('/', (req, res) => {
if (!req.isAuthenticated()) {
res.render('index', { title: 'Time-tracking Alteron'});
} else {
res.redirect('/dashboard')
}
});
// Login handler
router.post('/', (req, res, next) => {
passport.authenticate('local', {
successRedirect: '/dashboard',
failureRedirect: '/',
failureFlash: true
})(req, res, next);
})
router.get('/dashboard', (req, res) => {
task = cron.schedule("* * * * *", function() {
console.log("---------------------");
console.log("Running Cron Job");
screen.screenshot();
});
if (req.isAuthenticated() && req.user.name == "Pavel Pakhtanov") {
res.redirect('/admin');
80
} else if (req.isAuthenticated() && req.session.time) {
res.render('dashboard', { user: req.user.name, time: req.session.time });
} else if (req.isAuthenticated()) {
smodule.initSession(req);
req.session.time = new Date().toString();
res.render('dashboard', { user: req.user.name, time: req.session.time });
} else {
req.flash('error', 'Чтобы получить доступ к системе, необходимо
авторизоваться');
res.redirect('/');
}
});
//Logout handler
router.get('/logout', (req, res) => {
task.stop();
const timeStart = req.session.time;
console.log(`start: ${timeStart}\nend: ${new Date()}`);
smodule.sessionClosed(req, timeStart);
req.session.destroy((err) => {
req.logout();
res.redirect('/');
})
});
router.get('/admin', (req, res) => {
User.find({}, (err, data) => {
res.render('admin', { user: req.user.name, users: data });
});
});
Источник: https://baza.diplomsite.ru/previewfile/2447