はじめに
こんにちは!DreamHanksのキムヨンビンです。
今回はNode.js関数をSQL Serverと連結する方法についてご説明いたします。
2-1. SQL Server作成
始まる前に、新しいデータベースサーバを作りましょう。
Azure Portalで「SQL Server」メニューを探します。
*SQLデータベースとわ違います。ご注意ください。
他の設定を変更する必要はありません。「確認および作成」ボタンをクリックしてデータベースサーバを作成してください。
ローカルでデータベースにアクセスするためにはパブリックアクセスを許可する必要があります。
データベースサーバリソースのネットワークメニューから「パブリックネットワークアクセス」を「選択したネットワーク」にしてください。
ファイアウォールに現在のIPを追加してください。「クライアント IPv4 アドレスの追加」ボタンをクリックして、簡単に追加することができます。
保存したら、データベースサーバの作成は終わりです。
2-2. SQL データベース作成
新しいデータベースを作りましょう。Azure Portalのメニューから「SQL データベース」そ探してください。
サーバーはこの前作ったサーバーを選んでください。
「コンピューティングとストレージ」は変更する必要があります。
「データベースの構成」ボタンをクリックしてください。
サービスレベルをStandardに設定してください。Free Tierの方(アカウントを作成してから12か月後まで)は無料で利用できます。
他の設定を変更する必要はありません。「確認および作成」ボタンをクリックしてデータベースを作成してください。
2-3. テストデータを追加
コードを書く前にテスト用のデータを追加しましょう。
1 2 3 4 5 6 7 |
create table test_greetings ( user_id varchar(100) primary key, nickname varchar(100) ); insert into [dbo].[test_greetings]([user_id], [nickname]) values ( 'kim', 'Kim' ), ( 'hoge', 'Hoge' ); |
Azureのクエリエディターを使って上のSQLコードを実行してください。
2-4. 関数アプリとDB連結
SQL Serverのインスタンスに接続するためにはTDSプロトコルを使う必要があります。
Node.jsはSQL Serverとの直接通信を行うことができないため、この記事では、tediousを使います。
1 |
npm i -S tedious |
関数のコードを修正します。
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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
var tedious = require('tedious'); const query = ` select [user_id], [nickname] from [dbo].[test_greetings] where [user_id] = @user_id ` function getUser(userID) { return new Promise((resolve, reject) => { const result = [] var connection = new tedious.Connection({ server: 'dhtestdb.database.windows.net', authentication: { type: 'default', options: { userName: 'theadmin', password: '1q2w3e4r!' } }, options: { encrypt: true, database: 'dhtestdb', } }); connection.connect((err) => { if (err) { console.error(`Database connection error: ${err}`); return } const req = new tedious.Request(query, (err) => { if (err) { return reject(err); } connection.close(); return resolve(result.length === 0 ? null : result[0]); }) req.addParameter('user_id', tedious.TYPES.NVarChar, userID); req.on('row', (columns) => { result.push(columns.map((column) => { return column.value })); }); connection.execSql(req); }); }) } module.exports = async function (context, req) { // ログはAzure Potalの「関数アプリ→関数→関数名→モニター」から見れます。 context.log('JavaScript HTTP trigger function processed a request.'); const userID = (req.query.user_id || (req.body && req.body.user_id)) const userData = userID ? await getUser(userID) : null // URLのパラメータやHTTP Bodyへアクセスできます。 const name = (userData && userData[1]); const responseMessage = name ? "Hello, " + name + ". This HTTP triggered function executed successfully." : "This HTTP triggered function executed successfully. Pass a valid user_id in the query string or in the request body for a personalized response."; // Responseオブジェクトを作ります。 context.res = { // status: 200, /* 「200 OK」がデフォルトです。 */ body: responseMessage }; } |
終わりに
今回の記事は以上になります。
次回は[第3回]その他開発に役に立つ情報(Node.js/MS SQL)を学びましょう。
ご覧いただきありがとうございます。
コメント