-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
143 lines (106 loc) · 2.47 KB
/
Copy pathindex.js
File metadata and controls
143 lines (106 loc) · 2.47 KB
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
const express = require('express')
const cors = require('cors')
const morgan = require('morgan')
const app = express()
app.use(cors())
app.use(express.json())
// register token
morgan.token('body', (req, res) => JSON.stringify(req.body))
app.use(
morgan((tokens, req, res) => {
return [
tokens.method(req, res),
tokens.url(req, res),
tokens.status(req, res),
tokens.res(req, res, 'content-length'), '-',
tokens['response-time'](req, res), 'ms',
tokens['body'](req, res),
].join(' ')
})
)
let persons = [
{
"name": "Arto Hellas",
"number": "040-123456",
"id": 1
},
{
"name": "Ada Lovelace",
"number": "39-44-5323523",
"id": 2
},
{
"name": "Dan Abramov",
"number": "12-43-234345",
"id": 3
},
{
"name": "Mary Poppendieck",
"number": "39-23-6423122",
"id": 4
}
]
const randomMinMax = (min, max) => {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1) + min);
}
const uniqueID = () => {
let id = 0
do {
id = randomMinMax(1, Number.MAX_SAFE_INTEGER)
} while ( persons.some(item => item.id == id) )
return id
}
app.get("/info", (req, res) => {
const count = `<p>Phonebook has info for ${persons.length} people</p>`
const date = `<p>${new Date().toUTCString()}</p>`
res.send(count + date)
})
app.get("/api/persons", (req, res) => {
res.json(persons)
})
app.get("/api/persons/:id", (req, res) => {
const id = req.params.id
const person = persons.find(p => p.id == id)
if (person) {
res.json(person)
} else {
res.status(404).end()
}
})
app.delete("/api/persons/:id", (req, res) => {
const id = req.params.id
const index = persons.findIndex(p => p.id == id)
if (index != -1) {
persons.splice(index, 1)
res.status(200).end()
} else {
res.status(404).end()
}
})
app.post("/api/persons", (req, res) => {
const obj = Object(req.body)
const keys = Object.keys(obj)
if (keys.length != 2) {
res.status(400)
res.json({ "error": "name or number is missing" })
res.end()
return
}
const name = obj[keys[0]]
const number = obj[keys[1]]
if (persons.some(item => item.name == name)) {
res.status(400)
res.json({ "error": "name must be unique" })
res.end()
return
}
const id = uniqueID()
persons.push({name, number, id})
res.status(200).end()
})
const PORT = 3001
app.listen(PORT, () => {
console.log(`Server running on port ${PORT}`)
})