@@ -4,50 +4,52 @@ require('dotenv').config()
4
4
const User = require ( './models/user' )
5
5
const app = express ( )
6
6
7
+ const requestLogger = ( request , response , next ) => {
8
+ console . log ( '---------' ) ;
9
+ console . log ( 'Method:' , request . method )
10
+ console . log ( 'Path: ' , request . path )
11
+ console . log ( 'Body: ' , request . body )
12
+ console . log ( '---------' )
13
+ next ( )
14
+ }
15
+
7
16
app . use ( cors ( ) )
17
+ app . use ( express . static ( 'build' ) )
8
18
app . use ( express . json ( ) )
19
+ app . use ( requestLogger )
9
20
10
- app . get ( '/' , ( request , response ) => {
11
- response . send ( "Hello there" )
12
- } )
21
+ // app.get('/', (request, response) => {
22
+ // response.send("Hello there")
23
+ // })
13
24
14
25
app . get ( '/api/users' , ( request , response ) => {
15
26
User . find ( { } ) . then ( users => {
16
27
response . json ( users )
17
28
} )
18
29
} )
19
30
20
- app . get ( '/api/users/:id' , ( request , response ) => {
31
+ app . get ( '/api/users/:id' , ( request , response , next ) => {
21
32
const id = request . params . id
22
- console . log ( id )
23
33
User . findById ( id )
24
34
. then ( user => {
25
35
user
26
36
? response . json ( user )
27
37
: response . status ( 404 ) . end ( )
28
- } ) . catch ( error => {
29
- response . status ( 400 ) . send ( { error :'malformated id' } ) . end ( )
30
- } )
38
+ } ) . catch ( error => next ( error ) )
31
39
} )
32
40
33
- app . delete ( '/api/users/:id' , ( request , response ) => {
41
+ app . delete ( '/api/users/:id' , ( request , response , next ) => {
34
42
const id = request . params . id
35
43
User . findByIdAndRemove ( id )
36
44
. then ( user => {
37
- user
38
- ? response . json ( user )
39
- : response . status ( 404 ) . end ( )
40
- } ) . catch ( error => {
41
- console . log ( error ) ;
42
- response . status ( 400 ) . send ( { error :'malformated id' } ) . end ( )
43
- } )
45
+ response . status ( 204 ) . end ( )
46
+ } ) . catch ( error => next ( error ) )
44
47
} )
45
48
46
49
app . post ( '/api/users/' , ( request , response ) => {
47
50
const user = request . body
48
51
49
52
const newUser = new User ( {
50
- "email" : user . email ,
51
53
"fname" : user . fname ,
52
54
"lname" : user . lname ,
53
55
"password" : user . password
@@ -62,12 +64,40 @@ app.post('/api/users/', (request, response) => {
62
64
} )
63
65
} )
64
66
67
+ app . put ( '/api/users/:id' , ( request , response , next ) => {
68
+ const user = request . body
69
+
70
+ const updatedUserData = {
71
+ "fname" : user . fname ,
72
+ "lname" : user . lname ,
73
+ "password" : user . password
74
+ }
75
+
76
+ // bydefault updatedUser returns old res, optional param "{new : true}" fixes it, returns updated data
77
+ User . findByIdAndUpdate ( request . params . id , updatedUserData , { new : true } )
78
+ . then ( updatedUser => {
79
+ response . json ( updatedUser )
80
+ } ) . catch ( error => next ( error ) )
81
+ } )
82
+
65
83
const unknownEndpoint = ( request , response ) => {
66
84
response . status ( 404 ) . send ( { error : 'unknown endpoint' } )
67
85
}
68
86
69
87
app . use ( unknownEndpoint )
70
88
89
+ const errorHandler = ( error , request , response , next ) => {
90
+ console . error ( error . message )
91
+
92
+ if ( error . name === 'CastError' ) {
93
+ return response . status ( 400 ) . send ( { error : 'malformatted id' } )
94
+ }
95
+
96
+ next ( error )
97
+ }
98
+
99
+ app . use ( errorHandler )
100
+
71
101
const PORT = process . env . PORT || 3001
72
102
app . listen ( PORT , ( ) => {
73
103
console . log ( `Server running on port http://localhost:${ PORT } ` )
0 commit comments