Node.jsと組み合わせるDBはNosql系のDBが多いですが、今回はSQLServerでやってみました。
MS純正のNode用ドライバは以前から提供されているのですが、日本語での情報がほとんどないため結構苦労しました。
今回はHyper-V上のWindows7にSQLServer2012ExpressとNode.jsをインストールしてみました。
環境:
・Windows7 Pro SP1 32bit
・SQLServer 2012 Express x86版
・Node.js v0.8.25 32bit
その他
・Express 3.3.0 + ejs
また node-sqlserverのコンパイルに必要なのが
・Visual C++ 2010 Express
・Python 2.7
となります。
導入手順
1.Node.jsのダウンロードとインストールをします。今回は0.8系の最新版を選択しました。
(最新安定版の10.0系ではnode-sqlserverがコンパイルできませんでした。)
2.Visual C++ 2010 ExpressとSQLServer2012Expressをダウンロードして、インストールします。
SQLServerはネットワーク接続できるようにファイアウォール等の設定をしています。
3.Python2.7をダウンロードしてインストールします。
4.SQLServerに「test」データベースを作成し、「T_M商品」テーブルを作成します。
内容は下の図を参照してください。データも適当に入れておきます。
5.C:\に「node」フォルダを作成し、この中にアプリケーションを配置するようにします。
6.Node.jsコマンドプロンプトを起動してからC:\nodeフォルダに移動します。
7.コマンドプロンプトでc:\node> npm install -g express と入力してExpressをインストールします。
8.c:\node> express -e test と入力してtestフォルダにアプリケーションの雛形を作成します。
testフォルダには以下のように雛形が作成されます。
9.package.jsonファイルをエディタで以下のように編集します。
--------------------------------------------------------
{
"name": "application-name",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "node app.js"
},
"dependencies": {
"express": "3.3.0",
"ejs": "*",
"node-sqlserver": "*" <------------赤字部分を追加
}
}
--------------------------------------------------------
このときファイルの文字コードに気をつけましょう。UTF-8で保存しておかないと正常に動作しない可能性があります。以下すべてのファイルの文字コードがUTF-8になるようにしてください。
10.コマンドプロンプト上でtestフォルダに移動してから c:\node\test> npm install と入力する
と先ほどのpackage.jsonの内容にしたがってインストールが行われます。このとき途中で
黄色のワーニングメッセージが出るかもしれませんが、コンパイル環境が問題なければ
そのまま問題なく終了します。
11.問題なくインストールができるとtestフォルダにはnode_modulesフォルダが追加されています。
12.node_modules>node-sqlserver>build>Releaseフォルダ内のsqlserver.nodeファイルを
node_modules>node-sqlserver>libフォルダ内にコピーします。
13.testフォルダにあるapp.jsファイルを以下のように編集します。
途中から
----------------------------------
app.get('/', routes.index);
app.get('/users', user.list);
app.post('/',routes.index); <-----赤字の部分を追加
----------------------------------
以下は変更なし
14.test>routesフォルダにあるindex.jsファイルを以下のように編集します。
-------------------------------------------------------------------------------
exports.index = function(req, res){
if (req.body.code) {
var sql=require('node-sqlserver');
var cn_str="Driver={SQL Server Native Client 11.0};Server=(local);Database=test;Uid=ユーザー名;Pwd=パスワード;";
sql.query(cn_str,"select * from T_M商品 where 商品コード='" + req.body.code + "'",function(err,rst) {
if (err) {
res.render('index', { title: 'ERROR' });
console.log(err);
}
res.render('index2',{ title: 'Result',
rst: rst
});
});
}
else {
res.render('index', { title: '検索' });
}
};
-------------------------------------------------------------------------------
15.test>viewsフォルダにあるindex.ejsファイルを以下のように編集します。
-------------------------------------------------------------------------------
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title><%= title %></title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<h1>検索</h1>
<form method="POST" action="/">
コード検索: <input type="text" name="code" size="50">
<input type="submit" value="検索実行">
</form>
</body>
</html>
-------------------------------------------------------------------------------
16.test>viewsフォルダにindex2.ejsファイルを以下の内容で追加します。
-------------------------------------------------------------------------------
<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<h1>Data</h1>
<form method="POST" action="/">
コード検索: <input type="text" name="code" size="50">
<input type="submit" value="検索実行">
</form>
<P>
<table border="1">
<tr>
<th>商品コード</th>
<th>商品名</th>
<th>標準価格</th>
</tr>
<% for(var i=0;i<rst.length;i++){ %>
<tr>
<td> <%= rst[i]['商品コード'] %> </td>
<td> <%= rst[i]['商品名'] %> </td>
<td> <%= rst[i]['価格'] %> </td>
</tr>
<% } %>
</table>
</body>
</html>
-------------------------------------------------------------------------------
17.アプリケーションを動かしてみます。コマンドプロンプトでc:\node\testフォルダに移動して
c:\node\test> node app.jsと入力します。
問題がなければ「Express server listeng on port 3000」と表示されます。
18.ブラウザで「http://localhost:3000/」にアクセスすると以下のように表示されます。
19.試しにコードを入力して検索を実行すると以下のような結果になりました。
まだSelect文のテストしかしていませんが、このようにNode.js+SQLServerの組み合わせでアプリケーションが作成できました。
Node.jsはまだまだ勉強中なのでたいしたサンプルではないですが、少しでも参考になればと思います。
0 件のコメント:
コメントを投稿