基礎から学ぶNode.js

第7回 Node.jsアプリケーションをWindow Azureで動かす

この記事を読むのに必要な時間:およそ 3 分

Azureストレージに接続するように実装

MongoDBからAzureストレージを使うように書き換えてみましょう。app1/routes/main.jsを開いて,コードを以下のように書き換えます。

var uuid = require('node-uuid');
var azure = require('azure');

const TABLE_NAME = "table1";
const PARTITION = "partition1";

exports.index = function(req, res){
  var tableService = azure.createTableService();
  tableService.createTableIfNotExists(TABLE_NAME, function(err){
      if (err) {
        console.log(err);
        res.render('index', { title: 'Entry List', items: [] });
        return;
      }
      
      var query = azure.TableQuery.select().from(TABLE_NAME);
      tableService.queryEntities(query, function(err, entities){
          var items;
          if (err) {
            console.log(err);
            items = [];
          } else {
            items = entities;
          }
          res.render('index', { title: 'Entry List', items: items });
        });
    });
};

exports.form = function(req, res){
  res.render('form', { title: 'New Entry' })
};

exports.create = function(req, res){
  var tableService = azure.createTableService();
  tableService.createTableIfNotExists(TABLE_NAME, function(err){
      if (err) {
        console.log(err);
        res.redirect('back');
        return;
      }
     
      var newPost = {
        PartitionKey : PARTITION,
        RowKey: uuid(),
        text: req.body.text,
        created: new Date() 
      };

      tableService.insertEntity(TABLE_NAME, newPost, function(err){ 
          if (err){
            console.log(err);
            res.redirect('back');
            return;
          }
          res.redirect('/');
      });
  });
};

それでは順に説明します。最初のrequireは追加した二つのモジュールのインポート宣言です。さらにAzureストレージのテーブルにおける,テーブル名とパーティションキーを定数として宣言しています。

次にexports.indexのインデックスページでの一覧表示部分の説明です。azureオブジェクトのcreateTableServiceメソッドでテーブルにアクセスするクライアントインスタンスを取得します。TableQueryオブジェクトはメソッドチェーンを使ってクエリを定義できるオブジェクトで,サンプルでは指定したテーブルからすべてを取得するものになります。そのクエリを引数にTableServiceのqueryEntitiesメソッドで内容を取得し,コールバックで画面内容を更新しています。

続いてexports.createのフォームから入力されたテキストをテーブルのエンティティに追加する個所です。insertEntityメソッドの引数にエンティティのJSONを渡して呼び出せば,追加できます。エンティティにはPartitionKeyとRowKeyが必須であり,それぞれテーブルの構成に関わるものです。今回のサンプルではPartitionKeyは固定,つまり同一パーティションに書き込み,RowKeyはnode-uuidの機能であるユニークID生成関数uuidで都度セットしています。

上記のどちらも,createTableIfNotExistsメソッドをまず呼び出しているのは,その名の通りテーブルがない場合は作成するという手順を挟んでいるからです。

Azure Webサイトへのデプロイ

下部のコマンドラインから「git add .」「git commit -m ⁠changed db from mongo to azure table.⁠⁠」をそれぞれ続けて実行して,変更内容をコミットします。

図4 Azureへのデプロイ時のコンソール

図4 Azureへのデプロイ時のコンソール

さらに「git pull azure master」を実行すると,AzureのGitリポジトリに反映されると同時に,Webサイトに自動的にデプロイされます図4⁠。

図5 AzureでのNode.jsの実行結果

図5 AzureでのNode.jsの実行結果

AzureポータルのWEBサイトの一覧でURLをクリックすると,Azure上で動作するNode.jsアプリケーションにアクセスできます図5⁠。

最後に

Cloud9 IDEとWindows Azureという開発および実行環境がクラウド上だけに閉じた状態で,Node.jsアプリケーションを制作する例を紹介しました。

長らく続きました本連載も,今回で最後となります。Node.jsや関連するクラウドサービスの利用に際して,少しでも助けになれば幸いです。

著者プロフィール

高橋俊光(たかはしとしみつ)

ティルフィン合同会社 代表。

メーカー企業でパッケージソフト開発などに携わった後,ティルフィン合同会社を設立しフリーエンジニアとして,RIAやスマートモバイルアプリとサーバーサイドと広い分野で開発に従事。iOSアプリ トレンドトピック,Newstrushをリリースしている。