=====сессия в БД=====
server.js
const express = require('express');//Подключаем модуль
const path = require('path');//Модуль для работы с путями к файлам и папкам
const exphbs = require('express-handlebars');//Подключаем шаблонизатор
const db = require('mongoose');
const session = require('express-session');//модуль для создания сессий, в express
const MongoStore = require('connect-mongodb-session')(session);//Реквайр возвращает функцию которую мы сразу вызываем,
// куда мы передаем пакет session, который используем для синхронизации. Вернет класс
const config = require('./config/config');
const User = require('./models/user');
const varMiddleware = require('./middleware/variables');//модуль проверки авторизации
const app= express();//Результат работы модуля express, по сути создает сервер
const PORT = process.env.PORT || 3000; //Получить порт из переменного окружения или использовать дефолтный
const store = new MongoStore({//создаем коллекцию в БД
collection: 'sessions',//Название коллекции
uri: config.mongoURI//коннект
});
/**
* Подключаем роуты
*/
const authRoutes = require('./routes/auth');//Страница auth
const hbs= exphbs.create({//Настройки шаблонизатора
defaultLayout: 'main',//Шаблон по умолчанию, основной, (template/layouts/main.hbs)
extname: 'hbs' //Расширение шаблонов, пользовательское. По умолчанию express-handlebars
});
app.engine('hbs', hbs.engine);//Подключени шаблонизатора к express, регестрируем движок
app.set('view engine', 'hbs');//Запускаем шаблонизатор, используем
app.set('views', 'template');//Указываем папку с шаблонами
app.use(express.static(path.join(__dirname,'public')));//Статические папки для хранения стилей картинок
app.use(express.urlencoded({extended: true}));
app.use(session({//инициализация сессии
secret: 'key secret',//секретный ключ для сессии
resave: false,
saveUninitialized: false,
store: store //передаем объект
}));
app.use(varMiddleware);//middleware - срабатывает при загруке страницы, данный метод проверяет авторизацию middleware/variables.js
/**
* Регестрируем роуты, с префиксами
*/
app.use('/auth',authRoutes);//Страница авторизации
async function start(){
try{
await db.connect(config.mongoURI,{//подключение к БД
useNewUrlParser: true,
useFindAndModify: false
});
console.log('MongoDB has started ...');
app.listen(PORT, () => {//Слушать 3000 порт
console.log(`server is running on port ${PORT}`);
});
}
catch(e){
console.log(e);//Ксли коннект не удался;
}
}
start();
**routes/auth.js**
const {Router} = require('express');//модуль express
const User = require('../models/user');//модель пользователя
const router = Router();//инициируем роутер
/**
* Страница /auth/login
*/
router.get('/login',(req, res) => {
res.render('auth/login',{//шаблон template/auth/login.hbs
title: 'авторизация'
});
});
/**
* Авторизуем пользователя
*/
router.post('/login', async (req, res) => {
req.session.user = await User.findById('5d4882ca21de572e80bae92b');//получить пользователя, пока пользователь статичен
req.session.isAuthenticated = true;//добавить в сессию свойство isAuthenticated = true
req.session.save(err => {//метод необходим только в том случае когда, нужно подождать пока не сохранится сессия
if(err){
throw err;
}
res.redirect('/');//редирект на главную страницу,
// будет выполнен только после того как сессия сохранилась
});
});
module.exports = router;//Экспортирум роутер