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

3. データベースとORM

道具

話の流れ

  1. MySQLの準備(管理者サイド;ここは説明するだけにとどめておく)
  2. データベース(RDBMS用語としての)へのアクセスを確認
  3. ORMのインストール
  4. ORM経由でのデータの読み書き(のためのコードを書く)

1. MySQLの準備

(本章は管理者が行う作業)

  1. インストール:
  2. 設定
  3. データベースの作成と、権限委譲(mysqlの管理者)

       CREATE DATABASE db名 ;
       # のあと、権限委譲を行う。
       GRANT ALL PRIVILEGES ON db名.* TO ユーザ名@localhost IDENTIFIED BY 'パスワード' WITH GRANT OPTION ;
       GRANT ALL PRIVILEGES ON db名.* TO ユーザ名@% IDENTIFIED BY 'パスワード'  ;
       # 同じサーバ機上のクライアントからの接続のための
       パスワードと、
       # それ以外(の全部、を表すためにワイルドカード文字として
       #   % で表現している。シェルやコマンドプロンプトの
       #   * に相当するもの)のためのパスワード、
       # と2回に分けて入れる必要があるようだ。
    

2. (MySQL上の)データベースへのアクセス

3.4. Sequelizeのインストールと利用

参考になるサイトが多数ある(たとえばここは 「node.js ORM mysql」でググると上のほうに現れる)ので参照してみて下さい。

  1. インストール
  2. Sequeilzeの設定(コマンドを使って)

  3. Sequelizeを使うコード

3.5 いくつかのトラブルとその対策

  1. 日本語データについて
  2. 入力結果が画面にすぐに反映されない問題

    (と、結果表示画面のURLの問題)

    と、現時点で route/memo.js は以下のようなコードになる。

     var express = require('express');
     var router = express.Router();
     let db = require('../models/index');
     // Sequelize and mysql version
    
     router.get('/', (req, res, next)=> {
       db.memo.findAll({order: [['id','DESC']]}).then((docs)=>{
         res.render('memo', {list:docs})})
     });
    
     router.post('/add',(req,res)=>{
       // console.log(req.body.memo)
       db.memo.create({
         date: new Date().toLocaleDateString(),
         memo: req.body.memo
       }).then((created)=>{
          console.log(`new data ${created.dataValues.memo}`)
       })
       res.redirect('/memo')
     })
     module.exports = router;
    
  3. アクセスできない問題