Здесь показаны различия между двумя версиями данной страницы.
| Следующая версия | Предыдущая версия | ||
|
nodejs:404 [2021/08/17 22:45] werwolf создано |
nodejs:404 [2023/01/12 12:18] (текущий) |
||
|---|---|---|---|
| Строка 15: | Строка 15: | ||
| }); | }); | ||
| }; | }; | ||
| + | </code> | ||
| + | |||
| + | **server.js** | ||
| + | <code javascript> | ||
| + | const express = require('express');//Подключаем модуль | ||
| + | const path = require('path');//Модуль для работы с путями к файлам и папкам | ||
| + | const csrf = require('csurf');//CSRF - защита (Cross-Site Request Forger) | ||
| + | const flash = require('connect-flash');//серверные сообщения | ||
| + | const exphbs = require('express-handlebars');//Подключаем шаблонизатор | ||
| + | const db = require('mongoose'); //библиотека для mongodb | ||
| + | const session = require('express-session');//модуль для создания сессий, в express | ||
| + | const MongoStore = require('connect-mongodb-session')(session);//Реквайр возвращает функцию которую мы сразу вызываем, | ||
| + | // куда мы передаем пакет session, который используем для синхронизации. Вернет класс | ||
| + | const config = require('./config/config'); //конфиг с url к БД, и секретным ключом | ||
| + | |||
| + | const varMiddleware = require('./middleware/variables');//модуль проверки авторизации | ||
| + | const userMiddleware = require('./middleware/user');//модуль инициализации авторизованного пользователя | ||
| + | const errorMiddleware = require('./middleware/error');//модуль инициализации страницы 404 | ||
| + | |||
| + | const app= express();//Результат работы модуля express, по сути создает сервер | ||
| + | const PORT = process.env.PORT || 3000; //Получить порт из переменного окружения или использовать дефолтный | ||
| + | const store = new MongoStore({//создаем коллекцию в БД | ||
| + | collection: 'sessions',//Название коллекции | ||
| + | uri: config.mongoURI//коннект | ||
| + | |||
| + | }); | ||
| + | |||
| + | /** | ||
| + | * Подключаем роуты | ||
| + | */ | ||
| + | const homeRoutes = require('./routes/home');//главная страница | ||
| + | const coursesRoutes = require('./routes/courses');//Страница courses | ||
| + | const addRoutes = require('./routes/add');//Страница add | ||
| + | const aboutRoutes = require('./routes/about');//Страница about | ||
| + | const cardRoutes = require('./routes/card');//Страница about | ||
| + | const ordersRoutes = require('./routes/orders');//Страница about | ||
| + | const authRoutes = require('./routes/auth');//Страница auth | ||
| + | |||
| + | |||
| + | const hbs= exphbs.create({//Настройки шаблонизатора | ||
| + | defaultLayout: 'main',//Шаблон по умолчанию, основной, (template/layouts/main.hbs) | ||
| + | extname: 'hbs', //Расширение шаблонов, пользовательское. По умолчанию express-handlebars | ||
| + | helpers: require('./helpers/hbs-helpers')//подключаем свои операторы | ||
| + | }); | ||
| + | |||
| + | 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: config.session_secret,//секретный ключ для сессии | ||
| + | resave: false, | ||
| + | saveUninitialized: false, | ||
| + | store: store //передаем объект | ||
| + | })); | ||
| + | |||
| + | |||
| + | |||
| + | app.use(csrf());//Включение CSRF защиты (Cross-Site Request Forger), подключать нужно после сессии | ||
| + | app.use(flash());//серверные сообщения, подключать нужно после сессии | ||
| + | app.use(varMiddleware);//middleware - срабатывает при загруке страницы, данный метод проверяет авторизацию middleware/variables.js | ||
| + | app.use(userMiddleware);//middleware - срабатывает при загруке страницы, инициализируем авторизованного пользователя | ||
| + | /** | ||
| + | * Регестрируем роуты, с префиксами | ||
| + | */ | ||
| + | app.use('/', homeRoutes);//Главная страница | ||
| + | app.use('/courses',coursesRoutes);//страница courses | ||
| + | app.use('/add',addRoutes);//страница add | ||
| + | app.use('/about',aboutRoutes);//Страница about | ||
| + | app.use('/card',cardRoutes);//Страница корзина | ||
| + | app.use('/orders',ordersRoutes);//Страница заказов | ||
| + | app.use('/auth',authRoutes);//Страница заказов | ||
| + | app.use(errorMiddleware);//Страница 404, middleware | ||
| + | |||
| + | |||
| + | /** | ||
| + | * Запуск сервера | ||
| + | * @returns {Promise<void>} | ||
| + | */ | ||
| + | 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(); | ||
| + | </code> | ||
| + | |||
| + | <code javascript> | ||
| + | <h1>404 Ошибка</h1> | ||
| + | <p>Страница не найдена</p> | ||
| + | |||
| + | <a href="/">Вернуться на главную страницу</a> | ||
| </code> | </code> | ||