Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Express.JS

 Express.JS

JavaScript CodeLabs - Node.JS Express
http://eueung.github.io/js-stuff/express

Eueung Mulyana

December 19, 2015
Tweet

More Decks by Eueung Mulyana

Other Decks in Programming

Transcript

  1. Example #1 $ n o d e e x -

    0 1 - e x p r e s s j s . j s E x a m p l e a p p l i s t e n i n g a t h t t p : / / : : : 3 0 0 0 v a r e x p r e s s = r e q u i r e ( ' e x p r e s s ' ) ; v a r a p p = e x p r e s s ( ) ; / / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - a p p . g e t ( ' / ' , f u n c t i o n ( r e q , r e s ) { r e s . s e n d ( ' H e l l o W o r l d ! ' ) ; } ) ; / / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - v a r s e r v e r = a p p . l i s t e n ( 3 0 0 0 , f u n c t i o n ( ) { v a r h o s t = s e r v e r . a d d r e s s ( ) . a d d r e s s ; v a r p o r t = s e r v e r . a d d r e s s ( ) . p o r t ; c o n s o l e . l o g ( ' E x a m p l e a p p l i s t e n i n g a t h t t p : / / % s : % s ' , h o s t , p o r t ) ; } ) ; 4 / 21
  2. The app starts a server and listens on port 3000

    for connections. The app responds with “Hello World!” for requests to the root URL (/) or route. For every other path, it will respond with a 404 Not Found. The req (request) and res (response) are the exact same objects that Node provides, so you can invoke req.pipe(), req.on('data', callback), and anything else you would do without Express involved. Express vs. http Module v a r h t t p = r e q u i r e ( ' h t t p ' ) ; v a r s e r v e r = h t t p . c r e a t e S e r v e r ( f u n c t i o n ( ) { } ) ; s e r v e r . l i s t e n ( 3 0 0 0 , f u n c t i o n ( ) { c o n s o l e . l o g ( " L i s t e n i n g o n p o r t 3 0 0 0 " ) ; } ) ; v a r e x p r e s s = r e q u i r e ( ' e x p r e s s ' ) ; v a r a p p = e x p r e s s ( ) ; v a r s e r v e r = a p p . l i s t e n ( 3 0 0 0 , f u n c t i o n ( ) { c o n s o l e . l o g ( ' L i s t e n i n g o n p o r t % d ' , s e r v e r . a d d r e s s ( ) . p o r t ) } ) ; 5 / 21
  3. v a r e x p r e s s

    = r e q u i r e ( ' e x p r e s s ' ) ; v a r a p p = e x p r e s s ( ) ; / / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - a p p . g e t ( ' / ' , f u n c t i o n ( r e q , r e s ) { c o n s o l e . l o g ( " G o t a G E T r e q u e s t f o r t h e h o m e p a g e " ) ; r e s . s e n d ( ' H e l l o G E T ' ) ; } ) / / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - a p p . p o s t ( ' / ' , f u n c t i o n ( r e q , r e s ) { c o n s o l e . l o g ( " G o t a P O S T r e q u e s t f o r t h e h o m e p a g e " ) ; r e s . s e n d ( ' H e l l o P O S T ' ) ; } ) / / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - a p p . d e l e t e ( ' / d e l _ u s e r ' , f u n c t i o n ( r e q , r e s ) { c o n s o l e . l o g ( " G o t a D E L E T E r e q u e s t f o r / d e l _ u s e r " ) ; r e s . s e n d ( ' H e l l o D E L E T E ' ) ; } ) / / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - a p p . g e t ( ' / l i s t _ u s e r ' , f u n c t i o n ( r e q , r e s ) { c o n s o l e . l o g ( " G o t a G E T r e q u e s t f o r / l i s t _ u s e r " ) ; r e s . s e n d ( ' P a g e L i s t i n g ' ) ; } ) / / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - / / T h i s r e s p o n d s a G E T r e q u e s t f o r a b c d , a b x c d , a b 1 2 3 c d , a n d s o o n a p p . g e t ( ' / a b * c d ' , f u n c t i o n ( r e q , r e s ) { c o n s o l e . l o g ( " G o t a G E T r e q u e s t f o r / a b * c d " ) ; r e s . s e n d ( ' P a g e P a t t e r n M a t c h ' ) ; } ) / / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - v a r s e r v e r = a p p . l i s t e n ( 8 0 8 1 , f u n c t i o n ( ) { v a r h o s t = s e r v e r . a d d r e s s ( ) . a d d r e s s v a r p o r t = s e r v e r . a d d r e s s ( ) . p o r t c o n s o l e . l o g ( " E x a m p l e a p p l i s t e n i n g a t h t t p : / / % s : % s " , h o s t , p o r t ) } ) Example #2 $ > n o d e e x - 0 2 . j s E x a m p l e a p p l i s t e n i n g a t h t t p : / / : : : 8 0 8 1 G o t a G E T r e q u e s t f o r t h e h o m e p a g e G o t a P O S T r e q u e s t f o r t h e h o m e p a g e G o t a G E T r e q u e s t f o r / l i s t _ u s e r G o t a D E L E T E r e q u e s t f o r / d e l _ u s e r G o t a G E T r e q u e s t f o r / a b * c d 6 / 21
  4. $ > n o d e e x - 0

    3 . j s E x a m p l e a p p l i s t e n i n g a t h t t p : / / : : : 8 0 8 1 { f i r s t _ n a m e : ' D o d o l ' , l a s t _ n a m e : ' G a r u t ' } v a r e x p r e s s = r e q u i r e ( ' e x p r e s s ' ) ; v a r a p p = e x p r e s s ( ) ; / / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - a p p . u s e ( e x p r e s s . s t a t i c ( ' e x - 0 3 ' ) ) ; / / g e t ' / ' l a n g s u n g / / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - a p p . g e t ( ' / i n d e x - g e t ' , f u n c t i o n ( r e q , r e s ) { r e s . s e n d F i l e ( _ _ d i r n a m e + " / e x - 0 3 / " + " i n d e x - g e t . h t m l " ) ; } ) ; / / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - a p p . g e t ( ' / p r o c e s s _ g e t ' , f u n c t i o n ( r e q , r e s ) { r e s p o n s e = { f i r s t _ n a m e : r e q . q u e r y . f i r s t _ n a m e , l a s t _ n a m e : r e q . q u e r y . l a s t _ n a m e } ; c o n s o l e . l o g ( r e s p o n s e ) ; r e s . e n d ( J S O N . s t r i n g i f y ( r e s p o n s e ) ) ; } ) ; / / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - v a r s e r v e r = a p p . l i s t e n ( 8 0 8 1 , f u n c t i o n ( ) { v a r h o s t = s e r v e r . a d d r e s s ( ) . a d d r e s s v a r p o r t = s e r v e r . a d d r e s s ( ) . p o r t c o n s o l e . l o g ( " E x a m p l e a p p l i s t e n i n g a t h t t p : / / % s : % s " , h o s t , p o r t ) } ) ; Example #3 (GET) 8 / 21
  5. Example #3 (POST) $ > n o d e e

    x - 0 3 - p o s t . j s E x a m p l e a p p l i s t e n i n g a t h t t p : / / : : : 8 0 8 1 { f i r s t _ n a m e : ' d o d o l v i a p o s t ' , l a s t _ n a m e : ' g a r u t j g v i a p o s t ' v a r e x p r e s s = r e q u i r e ( ' e x p r e s s ' ) ; v a r a p p = e x p r e s s ( ) ; v a r b o d y P a r s e r = r e q u i r e ( ' b o d y - p a r s e r ' ) ; / / C r e a t e a p p l i c a t i o n / x - w w w - f o r m - u r l e n c o d e d p a r s e r v a r u r l e n c o d e d P a r s e r = b o d y P a r s e r . u r l e n c o d e d ( { e x t e n d e d : f a l s e a p p . u s e ( e x p r e s s . s t a t i c ( ' e x - 0 3 ' ) ) ; / / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - a p p . g e t ( ' / i n d e x - p o s t ' , f u n c t i o n ( r e q , r e s ) { r e s . s e n d F i l e ( _ _ d i r n a m e + " / e x - 0 3 / " + " i n d e x - p o s t . h t m l " ) ; } ) / / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - a p p . p o s t ( ' / p r o c e s s _ p o s t ' , u r l e n c o d e d P a r s e r , f u n c t i o n ( r e q , r e s r e s p o n s e = { f i r s t _ n a m e : r e q . b o d y . f i r s t _ n a m e , l a s t _ n a m e : r e q . b o d y . l a s t _ n a m e } ; c o n s o l e . l o g ( r e s p o n s e ) ; r e s . e n d ( J S O N . s t r i n g i f y ( r e s p o n s e ) ) ; } ) / / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - v a r s e r v e r = a p p . l i s t e n ( 8 0 8 1 , f u n c t i o n ( ) { v a r h o s t = s e r v e r . a d d r e s s ( ) . a d d r e s s v a r p o r t = s e r v e r . a d d r e s s ( ) . p o r t c o n s o l e . l o g ( " E x a m p l e a p p l i s t e n i n g a t h t t p : / / % s : % s " , h o s t , p } ) 9 / 21
  6. index-get.html < h t m l > < b o

    d y > < f o r m a c t i o n = " h t t p : / / 1 2 7 . 0 . 0 . 1 : 8 0 8 1 / p r o c e s s _ g e t " m e t h o d = " G E T " F i r s t N a m e : < i n p u t t y p e = " t e x t " n a m e = " f i r s t _ n a m e " > < b r > L a s t N a m e : < i n p u t t y p e = " t e x t " n a m e = " l a s t _ n a m e " > < i n p u t t y p e = " s u b m i t " v a l u e = " S u b m i t " > < / f o r m > < / b o d y > < / h t m l > index-post.html < h t m l > < b o d y > < f o r m a c t i o n = " h t t p : / / 1 2 7 . 0 . 0 . 1 : 8 0 8 1 / p r o c e s s _ p o s t " m e t h o d = " P O S T F i r s t N a m e : < i n p u t t y p e = " t e x t " n a m e = " f i r s t _ n a m e " > < b r > L a s t N a m e : < i n p u t t y p e = " t e x t " n a m e = " l a s t _ n a m e " > < i n p u t t y p e = " s u b m i t " v a l u e = " S u b m i t " > < / f o r m > < / b o d y > < / h t m l > 10 / 21
  7. Example #4 File Uploads a p p . p o

    s t ( ' / f i l e _ u p l o a d ' , u p l o a d . s i n g l e ( ' f i l e ' ) , f u n c t i o n ( r e q , r e s ) c o n s o l e . l o g ( r e q . f i l e . o r i g i n a l n a m e ) ; c o n s o l e . l o g ( r e q . f i l e . p a t h ) ; c o n s o l e . l o g ( r e q . f i l e . m i m e t y p e ) ; v a r f i l e = _ _ d i r n a m e + " / e x - 0 4 / r e s u l t / " + r e q . f i l e . o r i g i n a l n a m e ; f s . r e a d F i l e ( r e q . f i l e . p a t h , f u n c t i o n ( e r r , d a t a ) { f s . w r i t e F i l e ( f i l e , d a t a , f u n c t i o n ( e r r ) { i f ( e r r ) { c o n s o l e . l o g ( e r r ) ; } e l s e { r e s p o n s e = { m e s s a g e : ' F i l e u p l o a d e d s u c c e s s f u l l y ' c o n s o l e . l o g ( r e s p o n s e ) ; r e s . e n d ( J S O N . s t r i n g i f y ( r e s p o n s e ) ) ; } ) ; } ) ; } ) ; v a r e x p r e s s = r e q u i r e ( ' e x p r e s s ' ) ; v a r a p p = e x p r e s s ( ) ; v a r f s = r e q u i r e ( " f s " ) ; v a r b o d y P a r s e r = r e q u i r e ( ' b o d y - p a r s e r ' ) ; v a r m u l t e r = r e q u i r e ( ' m u l t e r ' ) ; / / - - - - - - - - - - - - - - - - - - - - - - - - - - a p p . u s e ( e x p r e s s . s t a t i c ( ' e x - 0 4 / p u b l i c ' ) ) ; a p p . u s e ( b o d y P a r s e r . u r l e n c o d e d ( { e x t e n d e d : f a l s e } ) ) ; v a r u p l o a d = m u l t e r ( { d e s t : ' e x - 0 4 / t m p / ' } ) ; / / - - - - - - - - - - - - - - - - - - - - - - - - - - a p p . g e t ( ' / i n d e x - u p l o a d ' , f u n c t i o n ( r e q , r e s ) { r e s . s e n d F i l e ( _ / / - - - - - - - - - - - - - - - - - - - - - - - - - - / / . . . / / - - - - - - - - - - - - - - - - - - - - - - - - - - v a r s e r v e r = a p p . l i s t e n ( 8 0 8 1 , f u n c t i o n ( ) { v a r h o s t = s e r v e r . a d d r e s s ( ) . a d d r e s s v a r p o r t = s e r v e r . a d d r e s s ( ) . p o r t c o n s o l e . l o g ( " E x a m p l e a p p l i s t e n i n g a t h t t p : / / % s : % s " , h o s t , p } ) ; 11 / 21
  8. Example #4 $ > n o d e e x

    - 0 4 . j s E x a m p l e a p p l i s t e n i n g a t h t t p : / / : : : 8 0 8 1 D r o n e s . p d f e x - 0 4 \ t m p \ 0 c 1 f d 3 3 b 7 2 2 f 4 0 f 2 6 c b 3 4 d 3 5 f 2 8 f 7 2 d 1 a p p l i c a t i o n / p d f { m e s s a g e : ' F i l e u p l o a d e d s u c c e s s f u l l y ' , f i l e n a m e : ' D r o n e s . p d f ' } < h t m l > < h e a d > < t i t l e > F i l e U p l o a d i n g F o r m < / t i t l e > < / h e a d > < b o d y > < h 3 > F i l e U p l o a d : < / h 3 > S e l e c t a f i l e t o u p l o a d : < b r / > < f o r m a c t i o n = " h t t p : / / 1 2 7 . 0 . 0 . 1 : 8 0 8 1 / f i l e _ u p l o a d " m e t h o d = " P O S T " e n c t y p e = " m u l t i p a r t / f o r m - d a t a " > < i n p u t t y p e = " f i l e " n a m e = " f i l e " s i z e = " 5 0 " / > < b r / > < i n p u t t y p e = " s u b m i t " v a l u e = " U p l o a d F i l e " / > < / f o r m > < / b o d y > < / h t m l > 12 / 21
  9. Example #5 cookie-parser $ > n o d e e

    x - 0 5 . j s E x a m p l e a p p l i s t e n i n g a t h t t p : / / : : : 8 0 8 1 C o o k i e s : { C h o : ' K i m ' , G r e e t : ' H e l l o ' } C o o k i e s : { } $ > c u r l h t t p : / / l o c a l h o s t : 8 0 8 1 - - c o o k i e " C h o = K i m ; G r e e t = H e l l o " R e q u e s t R e c e i v e d ! $ > c u r l h t t p : / / l o c a l h o s t : 8 0 8 1 R e q u e s t R e c e i v e d ! v a r e x p r e s s = r e q u i r e ( ' e x p r e s s ' ) ; v a r c o o k i e P a r s e r = r e q u i r e ( ' c o o k i e - p a r s e r ' ) ; / / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - v a r a p p = e x p r e s s ( ) ; a p p . u s e ( c o o k i e P a r s e r ( ) ) ; / / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - a p p . g e t ( ' / ' , f u n c t i o n ( r e q , r e s ) { c o n s o l e . l o g ( " C o o k i e s : " , r e q . c o o k i e s ) ; r e s . s e n d ( ' R e q u e s t R e c e i v e d ! ' ) ; } ) ; / / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - v a r s e r v e r = a p p . l i s t e n ( 8 0 8 1 , f u n c t i o n ( ) { v a r h o s t = s e r v e r . a d d r e s s ( ) . a d d r e s s v a r p o r t = s e r v e r . a d d r e s s ( ) . p o r t c o n s o l e . l o g ( " E x a m p l e a p p l i s t e n i n g a t h t t p : / / % s : % s " , h o s t , p } ) ; 13 / 21
  10. v a r e x p r e s s

    = r e q u i r e ( ' e x p r e s s ' ) ; v a r a p p = e x p r e s s ( ) ; v a r f s = r e q u i r e ( " f s " ) ; / / - - - - - - - - - - - - - - - - - - / / c a s e i n s e n s i t i v e a p p . g e t ( ' / l i s t U s e r s ' , f u n c t i o n ( r e q , r e s ) { f s . r e a d F i l e ( _ _ d i r n a m e + " / " + " e x - 0 6 - u s e r s . j s o n " , ' u t f 8 ' c o n s o l e . l o g ( d a t a ) ; r e s . e n d ( d a t a ) ; } ) ; } ) ; / / - - - - - - - - - - - - - - - - - - v a r s e r v e r = a p p . l i s t e n ( 8 0 8 1 , f u n c t i o n ( ) { v a r h o s t = s e r v e r . a d d r e s s ( ) . a d d r e s s v a r p o r t = s e r v e r . a d d r e s s ( ) . p o r t c o n s o l e . l o g ( " E x a m p l e a p p l i s t e n i n g a t h t t p : / / % s : % s " , h o s t , p o r t ) } ) ; Example #6 Using Flat JSON File GET /listusers 15 / 21
  11. Example #6 POST /adduser v a r s e r

    v e r = a p p . l i s t e n ( 8 0 8 1 , f u n c t i o n ( ) { v a r h o s t = s e r v e r . a d d r e s s ( ) . a d d r e s s v a r p o r t = s e r v e r . a d d r e s s ( ) . p o r t c o n s o l e . l o g ( " E x a m p l e a p p l i s t e n i n g a t h t t p : / / % s : % s " , h o s t , p o r t ) } ) ; v a r e x p r e s s = r e q u i r e ( ' e x p r e s s ' ) ; v a r a p p = e x p r e s s ( ) ; v a r f s = r e q u i r e ( " f s " ) ; v a r b o d y P a r s e r = r e q u i r e ( ' b o d y - p a r s e r ' ) ; / / - - - - - - - - - - - - - - - - - - a p p . u s e ( b o d y P a r s e r . u r l e n c o d e d ( { e x t e n d e d : t r u e } ) ) ; a p p . u s e ( b o d y P a r s e r . j s o n ( ) ) ; / / - - - - - - - - - - - - - - - - - - f u n c t i o n s a v e J s o n ( f i l e n a m e , f i l e c o n t e n t ) { f s . w r i t e F i l e ( f i l e n a m e , f i l e c o n t e n t , f u n c t i o n ( e r r ) { i f ( e r r ) { r e t u r n c o n s o l e . e r r o r ( e r r ) ; } } ) ; } / / - - - - - - - - - - - - - - - - - - a p p . p o s t ( ' / a d d U s e r ' , f u n c t i o n ( r e q , r e s ) { f s . r e a d F i l e ( _ _ d i r n a m e + " / " + " e x - 0 6 - u s e r s . j s o n " , ' u t f 8 ' d a t a = J S O N . p a r s e ( d a t a ) ; / / c o n s o l e . l o g ( r e q . b o d y ) ; d a t a [ " u s e r " + r e q . b o d y . i d ] = { } d a t a [ " u s e r " + r e q . b o d y . i d ] . n a m e = r e q . b o d y . n a m e d a t a [ " u s e r " + r e q . b o d y . i d ] . p a s s w o r d = r e q . b o d y . p a s s w o r d d a t a [ " u s e r " + r e q . b o d y . i d ] . p r o f e s s i o n = r e q . b o d y . p r o f e s d a t a [ " u s e r " + r e q . b o d y . i d ] . i d = + r e q . b o d y . i d c o n s o l e . l o g ( d a t a ) ; r e s . e n d ( J S O N . s t r i n g i f y ( d a t a ) ) ; s a v e J s o n ( _ _ d i r n a m e + " / " + " e x - 0 6 - u s e r s . j s o n " , J S O N . s t } ) ; } ) ; 16 / 21
  12. v a r e x p r e s s

    = r e q u i r e ( ' e x p r e s s ' ) ; v a r a p p = e x p r e s s ( ) ; v a r f s = r e q u i r e ( " f s " ) ; / / - - - - - - - - - - - - - - - - - - - - - a p p . g e t ( ' / : i d ' , f u n c t i o n ( r e q , r e s ) { f s . r e a d F i l e ( _ _ d i r n a m e + " / " + " e x - 0 6 - u s e r s . j s o n " , ' u t f 8 ' d a t a = J S O N . p a r s e ( d a t a ) ; v a r u s e r = d a t a [ " u s e r " + r e q . p a r a m s . i d ] c o n s o l e . l o g ( u s e r ) ; r e s . e n d ( J S O N . s t r i n g i f y ( u s e r ) ) ; } ) ; } ) ; / / - - - - - - - - - - - - - - - - - - - - - v a r s e r v e r = a p p . l i s t e n ( 8 0 8 1 , f u n c t i o n ( ) { v a r h o s t = s e r v e r . a d d r e s s ( ) . a d d r e s s v a r p o r t = s e r v e r . a d d r e s s ( ) . p o r t c o n s o l e . l o g ( " E x a m p l e a p p l i s t e n i n g a t h t t p : / / % s : % s " , h o s t , p o r t ) } ) ; Example #6 GET /:id 18 / 21
  13. Example #6 DELETE /deleteuser v a r e x p

    r e s s = r e q u i r e ( ' e x p r e s s ' ) ; v a r a p p = e x p r e s s ( ) ; v a r f s = r e q u i r e ( " f s " ) ; v a r b o d y P a r s e r = r e q u i r e ( ' b o d y - p a r s e r ' ) ; / / - - - - - - - - - - - - - - - - - - a p p . u s e ( b o d y P a r s e r . u r l e n c o d e d ( { e x t e n d e d : t r u e } ) ) ; a p p . u s e ( b o d y P a r s e r . j s o n ( ) ) ; / / - - - - - - - - - - - - - - - - - - f u n c t i o n s a v e J s o n ( f i l e n a m e , f i l e c o n t e n t ) { f s . w r i t e F i l e ( f i l e n a m e , f i l e c o n t e n t , f u n c t i o n ( e r r ) { i f ( e r r ) { r e t u r n c o n s o l e . e r r o r ( e r r ) ; } } ) ; } / / - - - - - - - - - - - - - - - - - - - - - a p p . d e l e t e ( ' / d e l e t e U s e r ' , f u n c t i o n ( r e q , r e s ) { f s . r e a d F i l e ( _ _ d i r n a m e + " / " + " e x - 0 6 - u s e r s . j s o n " , ' u t f 8 ' d a t a = J S O N . p a r s e ( d a t a ) ; d e l e t e d a t a [ " u s e r " + r e q . b o d y . i d ] ; c o n s o l e . l o g ( d a t a ) ; r e s . e n d ( J S O N . s t r i n g i f y ( d a t a ) ) ; s a v e J s o n ( _ _ d i r n a m e + " / " + " e x - 0 6 - u s e r s . j s o n " , J S O N . s t } ) ; } ) ; / / - - - - - - - - - - - - - - - - - - - - - v a r s e r v e r = a p p . l i s t e n ( 8 0 8 1 , f u n c t i o n ( ) { v a r h o s t = s e r v e r . a d d r e s s ( ) . a d d r e s s v a r p o r t = s e r v e r . a d d r e s s ( ) . p o r t c o n s o l e . l o g ( " E x a m p l e a p p l i s t e n i n g a t h t t p : / / % s : % s " , h o s t , p } ) ; 19 / 21
  14. References 1. Express Example 2. Node.js Express Framework 3. Express

    to Hapi.js 4. expressjs/multer 5. expressjs/body-parser 6. expressjs/cookie-parser 7. Node.js RESTful API Other Readings 1. JavaScript and Cookies 2. JavaScript Cookies 20 / 21