Nodo.jsからSQLServerに接続しデータを取得する方法
はい、hebiです。
Node.jsからSQLServerに接続し、Select文にてデータを取得してみたいと思います。
環境は以下を前提とします。
- SQLServerまたはSQLServerExpressがインストールされている前提。本記事ではSQLServerExpressを使用しています。
- 以下の記事で作成したプロジェクトを利用します。
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も触れていきたいと思います。
最後までお読みいただきありがとうございました。