お仕事の関係でnode.jsのサーバーサイドをがっつり弄ることになったけど
頂いた開発環境が良くできすぎていて何が起こっているのかさっぱりだったので
最低限の環境を自分で作ってみます。
今回は CentOS に MySQL と Node.jsでRest APIのシンプルな環境。
MySQLのORMであるSequelizeは触ったことはあったけどmigrationもscaffoldもやったことがなかったので
そのあたりの環境構築のお話。
まずはサーバー構築から。コスパ重視でConohaVPSで動かしてます。
DBとかOS寄りの話は割愛。とりあえずこれ見れば全部できる。
- CentOS7にyumでMariaDB最新版インストール – Qiita
- MySQLサーバにログインできないとき – Qiita
- 【すぐわかる】CentOSのポート開放のやり方
- CentOS 7.2にNode.jsをインストールする – Qiita
ここから本番。
swaggerをinstallする。swagger自体には色々な機能がある。
Swaggerの概要をまとめてみた。 – Qiita
何はともあれインストール。
1 |
npm install swagger -g |
この時に使うフレームワークは何か?と聞かれるので「express」を選択。
他もそのうち触ってみたい。
プロジェクトを作成
1 |
swagger project create PROJECT-NAME |
プロジェクトを起動
1 |
swagger project start |
一旦ここまででデフォルトのポート10010で http://x.x.x.x:10010/hello にアクセスするといい感じにAPIっぽくなってる。
MySQLのORM「Sequelize」をインストール
Sequelizeを使用してデータベースを操作するための基本的な情報 – Qiita
npmコマンドの –save オプションは package.jsonのdependenciesに追記するためのもの。
これ入れ忘れるとinstallしたのにsequelizeなんてないって言われるけど!!!ってなる。
1 |
npm install --save sequelize |
Sequelizeのコマンドを使用するためにswquelize-cliが必要。
1 |
npm install -g sequelize-cli |
SequelizeのコマンドでDB接続周りの設定を初期化
1 |
sequelize init |
すると必要なフォルダとconfigファイルが生まれる。
プロジェクト内のconfig/config.jsonを開くとjsonで環境ごとのDBの接続先が定義されているので
環境に合わせて変更する。
1 2 3 4 5 6 7 8 9 10 |
{ "development": { "username": "user", "password": "pass", "database": "databaseName", "host": "x.x.x.x", "dialect": "mysql" }, 〜 } |
モデルを自動で生成してさらにいい感じにテーブルまで作る。(migration)
Node.jsのSequelizeでDBのmigrationを実行する – Qiita
1 |
sequelize model:create --name user --underscored --attributes name:string,birth:date,country_code:integer |
するとuser.jsと言うのがmodels配下にできる。
カラムと型等定義されてるのがわかる。 Lengthの設定とかもしたいときは上のQiitaのページで教えてくれてるので手でいじる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
'use strict'; module.exports = (sequelize, DataTypes) => { const user = sequelize.define('user', { name: DataTypes.STRING, birth: DataTypes.DATE, country_code: DataTypes.INTEGER }, { underscored: true, }); user.associate = function(models) { // associations can be defined here }; return user; }; |
さらにmigration配下に
テーブル定義の書かれたものが出来上がる。
桁とかNull許容とかIndexとかここに追記していくことになる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
'use strict'; module.exports = { up: (queryInterface, Sequelize) => { return queryInterface.createTable('users', { id: { allowNull: false, autoIncrement: true, primaryKey: true, type: Sequelize.INTEGER }, name: { type: Sequelize.STRING }, birth: { type: Sequelize.DATE }, country_code: { type: Sequelize.INTEGER }, created_at: { allowNull: false, type: Sequelize.DATE }, updated_at: { allowNull: false, type: Sequelize.DATE } }); }, down: (queryInterface, Sequelize) => { return queryInterface.dropTable('users'); } }; |
Migrationしてテーブルを作成する
1 |
sequelize db:migrate |
migration配下のjsの分だけテーブルが作成される。
今回使うことはないけど念のためにscaffoldもやってみた。適当にテーブルを作っておく。
1 2 3 4 5 6 |
CREATE TABLE `scaffold_test` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(11) DEFAULT NULL, `titile` varchar(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
こちらは追加のモジュールが必要なのでインストール
Sequelize-Autoを使ってみた。 – Qiita
インストール。グローバルに
1 |
npm install -g sequelize-auto |
node.jsでMySQLを使えるようにする
1 |
npm install -g mysql |
新しいバージョンのMySQLとかMariaDBだとMySQL2も入れろって言われる可能性。
1 |
npm install -g mysql2 |
DBの中身を読み取っていい感じにモデルを生成
1 |
$ sequelize-auto -h <ホスト名> -d <データベース名> -u <ユーザ名> -x [パスワード] -p [ポート番号] --dialect [例:mysql] -c -o [出力ディレクトリ] |
するとmodels配下にいい感じにjsが増えてる。
一旦ここまでで環境構築完了!