-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.js
executable file
·128 lines (116 loc) · 2.88 KB
/
app.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
const express = require('express')
const fs = require('fs')
const path = require('path')
const app = express()
app.set('view engine', 'pug')
app.set('views', path.join(__dirname, 'views'))
app.use(express.static('public'))
function asyncHandler(cb) {
return async (req, res, next) => {
try {
await cb(req, res, next)
} catch (err) {
res.render('error', { error: err })
}
}
}
// CALL BACKS
// function getUsers(cb) {
// fs.readFile('data.json', 'utf8', (err, data) => {
// if (err) return cb(err)
// const users = JSON.parse(data)
// return cb(null, users)
// })
// }
// app.get('/', (req, res) => {
// getUsers((err, users) => {
// if (err) {
// res.render('error', { error: err })
// } else {
// res.render('index', {
// title: 'Users',
// users: users.users,
// })
// }
// })
// })
// CALLBACK HELL
// app.get('/:id', (req, res) => {
// getUser(req.params.id, (err, user) => {
// if (err) {
// res.render('error', { error: err })
// } else {
// getFollowers(user, (err, followers) => {
// if (err) {
// res.render('error', { error: err })
// } else {
// res.render('profile', { title: 'Profile Page', user: user, followers: followers })
// }
// })
// }
// })
// })
// PROMISES
// function getUsers() {
// return new Promise((res, rej) => {
// fs.readFile('data.json', 'utf8', (err, data) => {
// if (err) {
// rej(err)
// } else {
// const users = JSON.parse(data)
// res(users)
// }
// })
// })
// }
// app.get('/', (req, res) => {
// getUsers()
// .then((users) => {
// // throw new Error('testing catch')
// res.render('index', {
// title: 'Users',
// users: users.users,
// })
// })
// .catch((err) => {
// res.render('error', { error: err })
// })
// })
// An example of what using promises to perform two asynchronous operations might look like:
// app.get('/:id', (req, res) => {
// getUser(req.params.id)
// .then((user) => {
// return getFollowers(user)
// })
// .then((user, followers) => {
// res.render('profile', { title: 'Profile Page', users: user, followers: followers })
// })
// .catch((err) => {
// res.render('error', { error: err })
// })
// })
function getUsers() {
return new Promise((res, rej) => {
fs.readFile('data.json', 'utf8', (err, data) => {
if (err) {
rej(err)
} else {
const users = JSON.parse(data)
res(users)
}
})
})
}
// ASYNC / AWAIT
app.get(
'/',
asyncHandler(async (req, res) => {
const users = await getUsers()
// throw new Error('testing catch')
res.render('index', {
title: 'Users',
users: users.users,
})
}),
)
app.listen(3000, () => console.log('App listening on port 3000!'))