「Webサービスを(少しずつ)構築する」 第2回

2. 土台となるサーバアプリケーション

道具

手順

  1. 道具の準備
  2. アプリケーション生成(と動作確認)

=> 上記は別ページ参照

3. アプリケーションツリーを確認

4. 前回のページを組み込む

実験1: views にある index.pug を、前回作った pugファイルに 置き換えてしまおう。

実験2: 別URLでアクセスできるようにする。

  1. 前回のファイルを views にコピーする。
  2. routes/index.js をコピーして、memo.js とし、 内容を以下のように変更する。
  3. app.js を編集し、以下の2行を適切な場所に置く (似たような行の後に挿入する)。

     var memoRouter = require('./routes/memo')
    
     app.use('/memo', memoRouter)
    

5. プログラムから値を渡してみる。

  1. app.js の末尾に、変数に値を設定する文を追加してみる。

     data=[
       {date:'2018/11/1',memo:'まずは使ってみました'},
       {date:'2018/11/2',memo:'今日はいい天気でした'}
     ]
    
  2. routes/memo.js でそのデータを pug経由でテンプレートに渡す(res.renderの第2引数の中に包んで渡す)。

     res.render('memo', {list:data});
    
  3. views/memo.pug の table内で複数のtrを記述する部分を、 繰り返しによる記法に変更する。

    table
      tr
        th No.
        th 日付
        th 内容
      each item, index in list
        tr
          td= index+1
          td= item.date
          td= item.memo
    
5.1 値の受け渡しの別方法

問題点:

解決策:

  1. コマンドプロンプトで、node コマンドを入力し、 Node.js のREPLに入る。
  2. routes/memo.js の先頭2行を(コピペでいい)入力する。

     var express = require('express');
     var router = express.Router();
    
  3. ここで、routerと入力してみると、routerオブジェクト の各属性の名前と値が表示される。

     > router
    
     { [Function: router]
       params: {},
       _params: [],
       caseSensitive: undefined,
       mergeParams: undefined,
       strict: undefined,
       stack: [] }
     >
    

    こんな結果が得られる。

6. フォームのデータの受け渡し

データへのアクセスを考えると、データの

  1. 追加
  2. 変更
  3. 削除 といった処理が必要になることが多いが、 ここでは当面は 1.追加だけを考える (他の処理の実現については各自の今後の工夫に委ねます)。

以下のように進めていく。

  1. API(入力されたデータのWebでの受け渡し方)を決める。
  2. button の動作を記述する。
  3. サーバ側の動作を記述する(ための場所):

    routes/memo.js に以下のような行を追加してみよう。

    router.post('/add',(req,res)=>{
      console.log(req.body.memo)
      res.send(`get memo=${req.body.memo}`)
    })
    
  4. サーバ側の動作:

    入力された値を、配列に追加して、保存しておく。

  1. データの永続化: