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.  Node.JS - Express
    Eueung Mulyana
    http://eueung.github.io/js/express
    JS CodeLabs | Attribution-ShareAlike CC BY-SA
    1 / 21

    View full-size slide

  2. Agenda
    Basics
    RESTful APIs
    2 / 21

    View full-size slide

  3.  Basics
    3 / 21

    View full-size slide

  4. 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

    View full-size slide

  5. 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

    View full-size slide

  6. 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

    View full-size slide

  7. $
    > 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

    View full-size slide

  8. 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

    View full-size slide

  9. 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

    View full-size slide

  10. 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

    View full-size slide

  11. 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

    View full-size slide

  12. 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

    View full-size slide

  13.  RESTful APIs
    14 / 21

    View full-size slide

  14. 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

    View full-size slide

  15. 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

    View full-size slide

  16. 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

    View full-size slide

  17. 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

    View full-size slide

  18. 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

    View full-size slide

  19.  END
    Eueung Mulyana
    http://eueung.github.io/js/express
    JS CodeLabs | Attribution-ShareAlike CC BY-SA
    21 / 21

    View full-size slide