ExpressでWebサーバー2

(前回の続きだが、今回はgeneratorを使わないで作る)

1 骨組

フォルダ構成

2 基本動作の準備

(右図のような構成になることを想定している。)

  1. viewsフォルダを準備
  2. view engine の設定

     app.set('view engine', 'pug')
    

    フォルダ構成

  3. 静的コンテンツ用フォルダを準備

     app.use(express.static('public'))
    
  4. トップページの準備

     app.get('/',(req,res)=>{
         res.render('index')
     })
    

3 少し内容のあるページ

ここでは前々回に作ったページを、ネットワーク型に拡張することを試みる。

  1. CSS部分を分離

     div {
         background-color:red;
         position: absolute;
         width: 100px; height: 100px;
     }
    
  2. javascript部分も分離

     $(()=>{
         $(document).click(c)
     })
     function c(ev) {
         bx(ev.pageX,ev.pageY)
     }
     function bx(x,y){
     //console.log(x,y)
         $('body').append(
             $('<div/>').css({
                 left: x+'px', top: y+'px'
             })
         )
     }
    
  3. (html を生成するための)pugファイルを準備

     doctype html
     link(rel="stylesheet" href="css/1.css")
     // ↑は style(src="css/1.css") とも書けるようだ
     script(src="https://code.jquery.com/jquery-3.2.1.min.js")
     script(src="js/1.js")
     p hello
    
  4. 呼び出すためのコード

     app.get('/1',(req,res)=>{
         res.render('1')
     })
    
  5. ブラウザから開くための URL

     http://localhost:3000/1
    

4 クライアントからサーバへの非同期通信

  1. イベント発生時に(DIV要素を作ることに加えて)データ送信
  2. 上記(3.の送り方を前提として)を受け取ったサーバの動作

     var a=[]
     // で初期化をしておいて
     app.get('/b/:x/:y', (req,res)=>{
         var {x,y}=req.params
         // 1. の送り方の場合は req.query から値を取り出す
         console.log(`x=${x}, y=${y}`)
         a.push([x,y])
         // とりあえずデータとして記録しておく
         res.send('')
         // 空っぽでもいいので応答を返す必要があるようだ
         //   (ここは後から気づいて追加しました)
     })
    

(以下は次回扱う

5 サーバからクライアントへの通信(ページへのアクセス時)

6 サーバからクライアントへの非同期通信