-
Notifications
You must be signed in to change notification settings - Fork 2
/
08.data.js
94 lines (77 loc) · 2.23 KB
/
08.data.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
/*
Keyrt með:
node 08.data.js
Keyrir upp express vefþjón á http://localhost:3000 sem bíður upp á að fylla út
form með nafni, netfangi og kennitölu.
App notar express urlencoded middleware til að vinna úr gögnum.
Notar sérsmíðaðann kóða til að validate'a gögn úr formi og birta villur ef gögn
líta ekki rétt út. Verðum að gera þrátt fyrir að HTML input hafi required, email
type eða pattern, auðveldlega hægt að slökkva á því í vafra.
Almennt viljum við *ekki* sérsmíða svona kóða, heldur nota traust forritasöfn.
Þau tryggja okkur ekki 100% gegn villum, en eru töluvert nær því en ef við
skrifum sjálf.
*/
import express from 'express';
const app = express();
app.use(express.urlencoded({ extended: true }));
function template(name = '', email = '', ssn = '') {
return /* html */ `
<form method="post" action="/post">
<label>
Nafn:
<input required type="text" name="name" value="${name}">
</label>
<label>
Netfang:
<input required type="email" name="email" value="${email}">
</label>
<label>
Kennitala:
<input
required
type="text"
pattern="^[0-9]{6}-?[0-9]{4}$"
name="ssn"
value="${ssn}"
>
</label>
<button>Senda</button>
</form>
`;
}
app.get('/', (req, res) => {
res.send(template());
});
app.post('/post', (req, res) => {
const {
name = '',
email = '',
ssn = '',
} = req.body;
const errors = [];
if (name === '') {
errors.push('Nafn má ekki vera tómt');
}
if (email === '' || email.indexOf('@') < 0) {
errors.push('Netfang má ekki vera tómt og verður að innihalda @');
}
if (ssn === '' || !/^[0-9]{6}-?[0-9]{4}$/.test(ssn)) {
errors.push('Kennitala má ekki vera tóm og verður að vera tíu tölustafir');
}
if (errors.length > 0) {
return res.send(`${template(name, email, ssn)}
<p>Villur:</p>
<ul>
<li>${errors.join('</li><li>')}</li>
</ul>`);
}
const data = {
name,
email,
ssn,
};
return res.send(`<p>Skráning móttekin</p><p>${JSON.stringify(data)}`);
});
app.listen(3000, () => {
console.log('Server running at http://127.0.0.1:3000/');
});