forked from fdnd-task/pleasurable-ui
-
Notifications
You must be signed in to change notification settings - Fork 2
/
server.js
158 lines (129 loc) · 4.81 KB
/
server.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
/* Losjes gebaseerd op https://socket.io/get-started/chat */
import * as path from 'path'
import { Server } from 'socket.io'
import { createServer } from 'http'
import express from 'express'
import fetch from 'node-fetch'
const baseURL = 'https://api.vervoerregio-amsterdam.fdnd.nl/api/v1'
const principes = 'https://api.vervoerregio-amsterdam.fdnd.nl/api/v1/principes'
const checks = 'https://api.vervoerregio-amsterdam.fdnd.nl/api/v1/checks'
const partnerSlug = '/websites'
const postSlug = '/urls'
const partner_data = await fetch(baseURL + partnerSlug). then((response) => response.json())
const principe_data = await fetch(principes). then((response) => response.json())
const check_data = await fetch(checks). then((response) => response.json())
const app = express()
const http = createServer(app)
const ioServer = new Server(http, {
connectionStateRecovery: {
// De tijdsduur voor recovery bij disconnect
maxDisconnectionDuration: 2 * 60 * 1000,
// Of middlewares geskipped moeten worden bij recovery (ivm login)
skipMiddlewares: true,
},
})
const port = process.env.PORT || 2400
const historySize = 50
let history = []
app.set('view engine', 'ejs')
app.set('views', './views')
// Serveer client-side bestanden
app.use(express.static(path.resolve('public')))
app.get('/', function (req, res) {
res.render('index', {active: '/'})
})
app.get('/projectboard', function (req, res) {
res.render('projectboard', { partner_data, active: '/projectboard'})
})
app.get('/toolboard', function (request, response) {
let id = request.query.id || "clf7zms5va5670bw8rb7gwll2"
if (id) {
fetchJson(`${baseURL}/url?id=${id}`).then((data) => {
if (data.url.checks.length != 0) {
response.render('toolboard', { currentProject: data, checkedProjectSuccescriteria: data.url.checks[0].succescriteria, principe_data, active: '/toolboard' })
} else {
response.render('toolboard', { currentProject: data, checkedProjectSuccescriteria: data.url.checks, principe_data, active: '/toolboard' })
}
});
}
})
// app.post('/toolboard', function(req, res) {
// const checkURL = 'https://api.vervoerregio-amsterdam.fdnd.nl/api/v1/checks'
// postJson(checkURL, req.body).then((data) => {
// let newCheck = { ... req.body }
// console.log(req.body)
// if (data.data) {
// res.redirect('/')
// } else {
// const errormessage = `${req.body.check}: Checks zijn al gechecked.`
// const newdata = { error: errormessage, values: newCheck }
// res.render('projectboard', {newdata, check_data, partner_data, active: '/projectboard' })
// }
// })
// })
app.get('/urltoevoegen', function (req, res) {
res.render('urltoevoegen', {partner_data, active: '/urltoevoegen'})
})
app.get('/urloverzicht', function (request, response) {
let id = request.query.websiteId
// console.log(id);
let partnerUrl = 'https://api.vervoerregio-amsterdam.fdnd.nl/api/v1/urls?websiteId=' + id + '&first=100'
fetchJson(partnerUrl).then((partnerData) => {
response.render('urloverzicht', {partnerData, partner_data, active: '/projectboard'})
})
})
app.post('/urltoevoegen', function(req, res) {
const formURL = baseURL + postSlug
postJson(formURL, req.body).then((data) => {
let newURL = { ... req.body }
// console.log(JSON.stringify(data))
if (data.data) {
res.redirect('/projectboard')
} else {
const errormessage = `${req.body.url}: URL bestaat al.`
const newdata = { error: errormessage, values: newURL }
res.render('urltoevoegen', {newdata, partner_data, active: '/urltoevoegen' })
}
})
})
// Start de socket.io server op
ioServer.on('connection', (client) => {
// Log de connectie naar console
console.log(`user ${client.id} connected`)
// Stuur de history
client.emit('history', history)
// Luister naar een message van een gebruiker
client.on('message', (message) => {
// Check de maximum lengte van de historie
while (history.length > historySize) {
history.shift()
}
// Voeg het toe aan de historie
history.push(message)
// Verstuur het bericht naar alle clients
ioServer.emit('message', message)
})
// Luister naar een disconnect van een gebruiker
client.on('disconnect', () => {
// Log de disconnect
console.log(`user ${client.id} disconnected`)
})
})
// Start een http server op het ingestelde poortnummer en log de url
http.listen(port, () => {
console.log('listening on http://localhost:' + port)
})
async function fetchJson(url) {
return await fetch(url)
.then((response) => response.json())
.catch((error) => error)
}
async function postJson(url, body) {
return await fetch(url, {
method: 'post',
body: JSON.stringify(body),
headers: { 'Content-Type': 'application/json' },
})
.then((response) => response.json())
.catch((error) => error)
}