├── .gitignore ├── ejs ├── index.ejs ├── partials │ ├── head.ejs │ └── navbar.ejs └── features.ejs ├── middlewares.js ├── routes └── servers.js ├── static ├── demo │ ├── features.html │ └── index.html └── app.js ├── package.json ├── controllers └── servers.js └── index.js /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | node_modules -------------------------------------------------------------------------------- /ejs/index.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | <%- include('./partials/head'); %> 5 | 6 | 7 | <%- include('./partials/navbar'); %> 8 |
9 |

Main Page

10 |
11 | 12 | -------------------------------------------------------------------------------- /middlewares.js: -------------------------------------------------------------------------------- 1 | import colors from 'colors' 2 | 3 | export function requestTime(req, res, next) { 4 | req.requestTime = Date.now() 5 | next() 6 | } 7 | 8 | export function logger(req, res, next) { 9 | console.log(colors.bgGreen.black(`Req.time: ${req.requestTime}`)) 10 | next() 11 | } -------------------------------------------------------------------------------- /routes/servers.js: -------------------------------------------------------------------------------- 1 | import {Router} from 'express' 2 | import {getAll, create, remove} from '../controllers/servers.js' 3 | const router = Router() 4 | 5 | router.get('/api/server', getAll) 6 | 7 | router.post('/api/server', create) 8 | 9 | router.delete('/api/server/:id', remove) 10 | 11 | export default router 12 | -------------------------------------------------------------------------------- /static/demo/features.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 8 | Express App 9 | 10 | 11 |

Hello Features

12 | 13 | -------------------------------------------------------------------------------- /ejs/partials/head.ejs: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | <%= title %> -------------------------------------------------------------------------------- /static/demo/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 8 | Express App 9 | 10 | 11 |

Hello Express

12 | 13 | Go to features 14 | 15 | Download this page 16 | 17 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "express-cc", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "type": "module", 7 | "scripts": { 8 | "serve": "nodemon index.js", 9 | "start": "node index.js" 10 | }, 11 | "keywords": [ 12 | "express" 13 | ], 14 | "author": "Vladilen", 15 | "license": "ISC", 16 | "dependencies": { 17 | "colors": "^1.4.0", 18 | "ejs": "^3.1.5", 19 | "express": "^4.17.1" 20 | }, 21 | "devDependencies": { 22 | "@types/express": "^4.17.10", 23 | "nodemon": "^2.0.7" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /controllers/servers.js: -------------------------------------------------------------------------------- 1 | let servers = [ 2 | {id: '1', name: 'AWS', status: 'working'}, 3 | {id: '2', name: 'Google Cloud', status: 'working'}, 4 | {id: '3', name: 'Yandex Cloud', status: 'working'}, 5 | {id: '4', name: 'Microsoft', status: 'pending'} 6 | ] 7 | 8 | export const getAll = (req, res) => { 9 | res.status(200).json(servers) 10 | } 11 | 12 | export const create = (req, res) => { 13 | const newServer = { 14 | id: Date.now().toString(), 15 | ...req.body 16 | } 17 | servers.push(newServer) 18 | res.status(201).json(newServer) 19 | } 20 | 21 | export const remove = (req, res) => { 22 | servers = servers.filter(s => s.id !== req.params.id) 23 | res.json({message: 'Server has been removed.'}) 24 | } -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | import express from 'express' 2 | import path from 'path' 3 | import {requestTime, logger} from './middlewares.js' 4 | import serverRoutes from './routes/servers.js' 5 | 6 | const __dirname = path.resolve() 7 | const PORT = process.env.PORT ?? 3000 8 | const app = express() 9 | 10 | app.set('view engine', 'ejs') 11 | app.set('views', path.resolve(__dirname, 'ejs')) 12 | 13 | app.use(express.static(path.resolve(__dirname, 'static'))) 14 | app.use(express.json()) 15 | app.use(express.urlencoded({ extended: false })) 16 | app.use(requestTime) 17 | app.use(logger) 18 | 19 | app.use(serverRoutes) 20 | 21 | app.get('/', (req, res) => { 22 | res.render('index', {title: 'Main Page', active: 'main'}) 23 | }) 24 | 25 | app.get('/features', (req, res) => { 26 | res.render('features', {title: 'Features Page', active: 'features'}) 27 | }) 28 | 29 | app.listen(PORT, () => { 30 | console.log(`Server has been started on port ${PORT}...`) 31 | }) -------------------------------------------------------------------------------- /static/app.js: -------------------------------------------------------------------------------- 1 | const App = { 2 | data() { 3 | return { 4 | servers: [], 5 | name: '' 6 | } 7 | }, 8 | methods: { 9 | async createServer() { 10 | const data = { 11 | name: this.name, 12 | status: 'created' 13 | } 14 | const res = await fetch('/api/server', { 15 | method: 'POST', 16 | headers: { 17 | 'Content-Type': 'application/json' 18 | }, 19 | body: JSON.stringify(data) 20 | }) 21 | this.name = '' 22 | const newServer = await res.json() 23 | this.servers.push(newServer) 24 | }, 25 | async remove(id) { 26 | await fetch(`/api/server/${id}`, {method: 'DELETE'}) 27 | this.servers = this.servers.filter(s => s.id !== id) 28 | } 29 | }, 30 | async mounted() { 31 | const res = await fetch('/api/server') 32 | this.servers = await res.json() 33 | } 34 | } 35 | 36 | Vue.createApp(App).mount('#app') -------------------------------------------------------------------------------- /ejs/partials/navbar.ejs: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ejs/features.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | <%- include('./partials/head'); %> 5 | 6 | 7 | <%- include('./partials/navbar'); %> 8 |
9 |

Features Page

10 | 11 |
12 |
13 |
14 | 15 |
16 | 17 |
18 |
19 | Loading... 20 |
21 | 27 |
28 |
29 | 30 | 31 | 32 | 33 | --------------------------------------------------------------------------------