プログラミング

Nodo.jsからSQLServerに接続しデータを取得する方法

hebishima.shogo

はい、hebiです。

Node.jsからSQLServerに接続し、Select文にてデータを取得してみたいと思います。

環境は以下を前提とします。

  • SQLServerまたはSQLServerExpressがインストールされている前提。本記事ではSQLServerExpressを使用しています。
  • 以下の記事で作成したプロジェクトを利用します。
あわせて読みたい
TypeScriptでWebAPIを作ってみた(Node.js + routing-controllers)
TypeScriptでWebAPIを作ってみた(Node.js + routing-controllers)

DBは以下を作成。

スポンサーリンク

mssqlをインストール

SQLServerにアクセスするために、mssqlをインストールします。

npm install mssql

MSSQLServerのTCP/IP有効化

mssqlでSQLServerへアクセスするためにはSql Server Configuration Managerにて、MSSQLServerのTCP/IPを有効にする必要があります。

有効にしたら、SQLServerを再起動してください。

userController.tsの修正

接続設定

SQLServerと接続するための設定値を定義します。
trustServerCertificateはSQL ServerのSSL証明書が自動的に信頼されるように設定しています。
enableArithAbortはクエリ実行中にオーバーフローが発生した場合、クエリを終了するために設定しています。

const sql = require('mssql');
const config = {
    server: 'localhost',
    user: 'sa',
    password: 'password',
    database: 'Testdb',
    trustServerCertificate:true,
    options: {
        enableArithAbort: true,
    },
};

SELECT文実行

「sql.connect」でSQLServerと接続します。
「conn.request().input().query()」でSQL文を実行します。
input()でパラメータを設定し、query()でSQL文を記述します。
「res.recordset[0]」で結果を取得します。
「conn.close()」で接続を閉じます。

// 接続    
const conn = await sql.connect(config);
// SELECT文実行
const res = await conn.request()
    .input('id', request.params.id)
    .query("SELECT * FROM m_user WHERE id=@id");
// 結果を取得
const user: UserModel = res.recordset[0]
// 閉じる
conn.close();

以上でSELECT文の実行が可能となります。本来だとControllerクラスでは行わず、DataAccessクラスで実装するべきですが、ここでは割愛します。
以下完成したuserController.tsです。

import {
    JsonController,
    Get,
    Param,
    Res,
    Req
} from 'routing-controllers';

import { UserModel } from '../models'

const sql = require('mssql');
const config = {
    server: 'localhost',
    user: 'sa',
    password: 'password',
    database: 'Testdb',
    trustServerCertificate:true,
    options: {
        enableArithAbort: true,
    },
};

@JsonController("/users")
export class UserController {    
    @Get("/:id")
    // paramとして受け取るのではなく、req、resとしても受け取れる
    // https://tsed.io/docs/controllers.html#inject-request-and-response
    //async get(@Param("id") id: number) {
    async get(@Req() request: any, @Res() response: any){
        // 接続    
        const conn = await sql.connect(config);
        // SELECT文実行
        const res = await conn.request()
            //.input('id', id)
            .input('id', request.params.id)
            .query("SELECT * FROM m_user WHERE id=@id");
        // 結果を取得
        const user: UserModel = res.recordset[0]
        // 切断
        conn.close();
        return user;
    }
}

最後に

Node.jsからSQLServerへ接続し、SELECT文を実行する方法でした。
INSERT、UPDATE、DELETEも同じ要領でできるのかなと思ってます。トランザクション処理について記事にする際にINSERT、UPDATE、DELETEも触れていきたいと思います。

最後までお読みいただきありがとうございました。

スポンサーリンク
ABOUT ME
hebi
hebi
エンジニア
フルスタックエンジニアとして活躍中。
HTML5プロフェッショナル認定Level1、Level2所持者です。

未経験の方でも簡単にプログラミングを学べるようにと情報を発信しております。
記事URLをコピーしました