ほんじゃら堂

めんどくさい仕事をラクにする作業自動化レシピ集

Node.jsでSQLServerにWindows認証接続する

苦労したのでメモ。

Node.jsでのデータベース操作にはいつもknexを使用していて、

Knex.js - A SQL Query Builder for Javascript

knexはSQLServerにも対応しているのだけど、

そこで使用されているmssqlパッケージがWindows認証には対応していないのか、

うまく接続できなかった。

www.npmjs.com

このmssqlパッケージで使用されるドライバには

デフォルトで使用される「Tedious」と

Node.jsの0.12以上で使用可能な「msnodesqlv8」の

2種類があるようで、「Tedious」だとうまく接続できないっぽい。

knexでどうドライバを切り替えるのかが分からなかったのだけど、

単体で「msnodesqlv8」を使用するとうまく接続できた。

www.npmjs.com

使用方法

下記のWikiにドキュメントが記載されている。

github.com

Promise使ってデータ取得するなら下記のような感じ。

const msnodesql = require("msnodesqlv8");

async function fetchDataList(conn, query) {
    return new Promise((resolve, reject) => {
        conn.query(query, (err, rows) => {
            if (err !== null) {
                reject(err);
                return;
            }

            resolve(rows);
        });
    });
}

async function main() {
    const connectionString = "server=<接続先サーバ>\\<インスタンス名>;Database=<DB名>;Trusted_Connection=Yes;Driver={SQL Server Native Client 11.0}";
    msnodesql.open(connectionString, async (err, conn) => {
        const resultList = await fetchDataList(conn, 'select * from dbo.テーブル名');
    }
}

main();

更新処理とかは試してないけど、上記Wikiに記載されてるSQLを参考に

作成すれば実行できるはず。

現場で通用する力を身につける Node.jsの教科書

現場で通用する力を身につける Node.jsの教科書