Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

Azure Functions から SQLServerに接続する(node.js編)

前提

・空のAzureFunctionsの関数ができている。
・どこかに、SQLServerがたっている。

SQL接続には、tediousドライバーを使用します。
https://www.npmjs.com/package/tedious

急ぎ、他人に伝える必要があったので、手順をメモ程度に。

以下では、tediousのazurefunctionsへのインストール手順とサンプルコードで接続確認を行います。

手順

  1. azureポータルの「プラットフォーム機能」メニューより、「コンソール」を起動する。
>cd HttpTriggerJS1
HttpTriggerJS1>npm init -y
HttpTriggerJS1>npm install tedious --save

  1. 適当なコードを追加する。

この例では、index.jsの先頭に、以下でも追加して見る。
phonebookというテーブルが、xxxx.database.windows.netの、ddddというデータベースにある前提。
データベースユーザーは、ID/Passwordが、uuuu/ppppとする。

var Connection = require('tedious').Connection;
var TedRequest = require('tedious').Request;
var TYPES = require('tedious').TYPES;  

function scan_table(context, q_name){

   //データベース接続情報
    var config = {  
        userName: 'uuuu',  
        password: 'pppp',  
        server: 'xxxx.database.windows.net',   
        options: {
          encrypt:  true, 
          database: 'dddd'
        }  
    };

    //SQLは、一応、prepared statementにする。
    var query = "SELECT [familyname], [mobilenumber] "+
        "FROM [dbo].[phonebook] "+
        "WHERE [familyname] = @WHO";

    //CreateConnection
    var connection = new Connection(config);

    //接続
    connection.on('connect', function(err) {  
        if(err){
            //Error Handling
        } else {  
            // SQL実行
            results = executeStatement(query, obj);
        }
    });

    connection.on('end', function(err){
        console.log("connection End");
    });

    //SQL実行の実体
    function executeStatement(query) { 

        //応答を詰め込むバッファ
        var arr = [];
        var con_cnt = 2; //取得する列数

        console.log("executeStatement start"); 
        queryrequest = new TedRequest(query, function(err){
            if (err) {
                console.log(err);
            } else {
                //応答を返す場所。
                //arrをいい感じに処理する。
                context.log(arr[0][0]+arr[0][1]);
            }
        });

        //検索条件の指定
        queryrequest.addParameter('WHO', TYPES.NVarChar, q_name);

        queryrequest.on('row', function(columns) {  
            //見つかった。
            var record = new Array(con_cnt);
            var i = 0;
            columns.forEach( function(column) {
                record[i++] = column.value;
            });
            arr.push(record);
        });

        queryrequest.on('requestCompleted', function(rowCount, more){
            connection.close();
        });

        connection.execSql(queryrequest);

        return;
    }
}

index.jsからよびだしてみる。


module.exports = function (context, req) {
    context.log('JavaScript HTTP trigger function processed a request.');

    if (req.query.name || (req.body && req.body.name)) {
        context.res = {
            // status: 200, /* Defaults to 200 */
            body: "Hello " + (req.query.name || req.body.name)
        };

        //データベースアクセスと応答
        scan_table(context, req.query.name);

    }
    else {
        context.res = {
            status: 400,
            body: "Please pass a name on the query string or in the request body"
        };
    }
    context.done();
};

動かして見る。

screen4-1.png

azureポータルの「実行ボタン」横の「関数のURLの取得」で取り出したURLに対して、別ブラウザーから、?name=xxxをつけて、Functionsを呼び出して見る。xxxが、SQLのWHERE句になる。

azureポータルでは、関数画面を表示したままにする。
すると、azureポータルのログ画面に、結果が出るはず。

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f34333832392f61353236623130342d356130632d633732302d633962662d6632666365666335636433342e706e67.png

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
1
Help us understand the problem. What are the problem?