node.js + express 最小構成でAzure上のSQL Database(SQL Server)に接続する

あまりAzureのSQL Databaseに接続する記事が見当たらなかったので書いてみます。最小限なので、環境変数とか使ってません。本来は使うべきなのでそちらの記事もそのうち書きます。

Azure SQL Databaseで試す方は、Azure管理画面でファイアウォールに自身のIPを忘れずに追加してください。もちろんローカルに存在するSQLServerでも問題なく接続できます。

準備

まずは必要なモジュールのインストール。

npm install tedious

インストールが終わったら、既にあるindex.jsにコードを追加しましょう。まずは関連するモジュールの初期化とコンフィグの作成。

var Connection = require('tedious').Connection;
var Request = require('tedious').Request;
// SQLServerの接続定義を記載する。
var config = {
  server: 'サーバ名.database.windows.net',    // IPアドレスもしくはサーバー名
  authentication: {
    type: 'default',
    options: {
      userName: '接続ユーザ名',
      password: '接続パスワード',
      useUTC: true //必要に応じて。未入力ならfalseになる。
    }
  },
  options: {
    encrypt: true, //必要に応じて。
    database: 'データベース名'
  }
};

細かい解説は省きますが、encryptはSQLDatabaseならtrue、ローカルSQLServerならfalseで接続出来ました。もし接続出来ない時は変更してみてください。

次にgetメソッドを追加します。

router.get('/test', function (req, res, next) {
  var connection = new Connection(config);
  connection.on('connect', function (err) {
    if (err) {
      return res.status(500).send('sql connection error');
    }
    else {
      execute();
    }
  });

  function execute() {
    var errorflg = false;
    var content = [];
    request = new Request("SELECT * FROM テーブル名", function (err) {
      if (err) {
        errorflg = true;
        return res.status(500).send('sql query error');
      }
    });

    request.on('row', function (columns) {
      var result = {};
      columns.forEach(function (column) {
        result[column.metadata.colName] = column.value === null ? '' : column.value;
      });
      content.push(result);
      result = {};
    });

    request.on('requestCompleted', function () {
      connection.close();
    });

    connection.on('end', function () {
      if(!errorflg)
        return res.status(200).json(content);
    });
    connection.execSql(request);
  };
});

まず、connectionとrequestどちらもon(‘~~’~~~)で動作を記述している点に注目です。どれらもイベントハンドラにfunctionを登録するイメージで記述していきます。これを理解していないと、SQL文の結果が帰ってきていないのにレスポンスを返してしまったりします。

connectionの’connect’が成功した場合、リクエストを投げるfunctionへ進みます。
requestは結果を1行ずつ’row’で処理する必要があります。処理が終わるとrequestの’requestCompleted’が実行され、その後connectionの’end’が発火し一連の流れが終わります。

また、これらの動作を定義してからconnection.execSql()を実行しないと、思った動作にならないので注意してください。

最後に

今回は手っ取り早く実装することが目的だったのでやっちゃってますが、データベースへの接続情報をコードにベタ書きするのはタブーです。必ず環境変数にある情報を読み取ってくる様に実装しましょう。

レンタルサーバはConohaWINGが最強にオススメ!

muchilogでは今までいろんなレンタルサーバやSaaSを使ってきましたが、今では全てをConohaWINGにて運営しています。

■今まで使ってきたサービス一覧
・さくらレンタルサーバ(ベーシックプラン)
・カゴヤ
・Azure
・AWS

今ではこのブログは勿論、webサービスのバックエンドやアプリのサーバ機能もConohaWINGで動かしています。
そんなConohaWINGのメリットをいくつか紹介します!

【国内最速No.1】高性能レンタルサーバーConoHa WING

無料で最大2個の独自ドメインが使える!

サイト運営に必要な独自ドメインをなんと無料で取得することが可能です!これだけでも月100円以上は運営費が節約できます。

優れた速度と安定感

私がAzureやさくらを解約した大きな理由はこれ。Conohaは非常に安定して稼働しており、ダウンタイムがほぼ発生しません。発生した場合は潔くお知らせしてくれます。
また、このブログは勿論、バックエンドとして動いてるプログラムも処理速度が大幅に向上しました(体感で倍速以上)。 Azure等のSaaSからレンタルサーバに移行するって普通考えられませんよね?しかし実際に大きなメリットを感じているのです。

頻繁に開催されるキャンペーン

ConohaWINGは半額に迫るようなキャンペーンを頻繁に開催しています。このキャンペーンによって、性能的には業界トップクラスであるにも関わらず、 月額料金換算で最安値クラスで使えるのです。
基本的に長期一括契約の方がお得になるため、muchilogでは最長で契約することをオススメします。価格と性能のバランスを考えれば他に乗り換えることも考えれられませんし。

レンタルサーバは必須です!

web系のプログラミング学習を進める際には、レンタルサーバの契約は必須と思ってください。ローカルの環境と本番環境で動作が違うことは良くありますし、ポートフォリオを公開するのも大切です。

学習や制作に集中するためにも、満足度、速度、安定度全てのレベルが高いConohaWINGを最強にオススメします!

web系サービス開発会社に転職したい!

muchilogではIT系へ転職したいという方には「自社サービスを運営しているweb系企業」への転職をおすすめしています。

web系は「自由な社風」「成長できる環境」「ホワイトな労働条件」であることが多いからです。

そんなweb系企業への転職を確実にするためのプログラミングスクールが登場しました。


RUNTEQ

RUNTEQはただのスクールじゃない!

RUNTEQはweb系の開発会社。開発会社が運営するスクールなので必要とされる技術力は勿論習得可能。しかしそれだけではないのです。

特にweb系で転職・就職活動を行う際にはポートフォリオを求められることがあります。ポートフォリオとは自分自身の作品のことで、技術力や企画力を示すものです。

RUNTEQではポートフォリオの作成を企画段階からサポートしてくれます!

他のプログラミングスクールでは提携企業の派遣やアルバイトとして就職するしかなかったりもしますが、RUNTEQはあなたの市場価値を高める方法まで教えてくれるということですね。

また、RUNTEQが扱う教材はどれも第一線で当たり前に使われている技術。特に未経験者の独学ではどうしてもスキルセットに穴が出来てしまいます。その点RUNTEQは確実に現場力を養えます。

そして2020年2月〜2021年12月までの内定者の98%がweb系企業に内定しています。これはRUNTEQの指導力とサポートが優れていることの証拠でしょう。

まずは無料説明会に申し込んではいかがでしょうか?

RUNTEQ


Azure express js
muchiをフォローする
MUCHILOG
タイトルとURLをコピーしました