Node.jsとIRISを連携する(その2)

これまでIISを使ったRest通信を主体にアプリ作成を行ってきました。

たまたまNode.jsを使ってIRISと連携する機会があったので、ドキュメントや動画をみつつ構築を進めていきましたが、記載内容や動画の内容が古く、進捗に伸び悩みました。

紆余曲折ありましたが、連携までは完了したので、全4ステップに渡って手順を備忘として記載します。

今回は第2回目になります。

はじめに

サーバサイドの処理としてJavascriptを使いNode.jsでAPIを作成し、データを格納する先としてIRISを利用します。

Node.js → IRISの順番でコーディングしていきます!

Node.jsのJavaScript処理

ひとまず「npm init」を実行した際に指定した、「server.js」をコマンドで生成します。

type nul > server.js

生成したファイルに対し、Webアプリケーションとして機能するよう処理を記載していきます。

const express = require("express");
const app = express();

app.get("/dataSet", function(req, res){
    res.json({'sample':'データセット完了'});
});

app.get("/dataGet", function(req, res){
    res.json({'sample':'データゲット完了'});
});

app.listen(3000);
console.log('ポート3000番で待機中!');

たったこれだけのコードで、最低限のWebサーバが作成できるのが凄いですよね!
ビックリです!

では、これを起動させて疎通確認を行ってみましょう。

コマンドプロンプトで下記コマンドを実行します。

npm start

コマンドプロンプトに下記が表示されたら、起動OK!

> sample@1.0.0 start
> node server.js

ポート3000番で待機中!

では、早速POSTMANで確認したいと思います。

POSTMANを起動したら、GET関数で「localhost:3000/dataSet」を入力して、「Send」ボタンをクリックしす。

応答に「データセット完了」と表示されたらOKです。
同様に、「localhost:3000/dataGet」と入力して、応答を確認してみましょう。

問題なく応答が返ってきたのが確認出来ました。

では、次にIRISと連携するロジックを実装しましょう。

const express = require("express");
const app = express();

// IRIS連携処理
const irisnative = require('intersystems-iris-native');
const conn = irisnative.createConnection({
    host: 'localhost',
    port: '1972',
    ns  : 'sample',
    user: '_system',
    pwd : 'SYS'
});
const iris = conn.createIris();

app.get("/dataSet", function(req, res){
    // クラスメソッド実行(戻り値なし)
    iris.classMethodVoid("developer.Sample",'setToDo', 'データセット');
    res.json({'sample':'データセット完了'});
});

app.get("/dataGet", function(req, res){
    // クラスメソッド実行(戻り値あり)
    const text = iris.classMethodValue("developer.Sample",'getToDo');
    res.json({'sample':text});
});

app.listen(3000);
console.log('ポート3000番で待機中!');

「port」はスーパーサーバーポートを設定(だいたい1972ですよね)。
「ns」は対象のネームスペースを設定します。
「user」「pwd」はIRISに設定したユーザとパスワードになります。

iris.classMethodVoid, iris.classMethodValueに関しては、詳細は「次回(その3)」にてご紹介します。
現時点では、下記クラスメソッドを実行しているんだなーとイメージして下さい。

d ##class(developer.Sample).setToDo("データセット")
s text = ##class(developer.Sample).getToDo()

いったんNode.js側の処理は手を置いて、IRIS側の処理を記載していきたいと思います。

IRIS側の処理

では、IRISで新規クラス「developer.Sample.cls」を作成し、下記を記載していきます。
Node.jsとIRISの連携は、「引数」も「戻り値」もリテラル値しか使えないので、%Stringにしておきます。
 →いつか%List型や%DynamicObject型を使いたいですね。

Class developer.Sample
{

ClassMethod setToDo(text As %String)
{
    s ^Sample = text
}

ClassMethod getToDo() As %String
{
    q $g(^Sample)
}
}

では、POSTMANを使って、dataSetとdataGetを行ってみます。

IRISのターミナルで確認すると、「データセット」の文字列がグローバル「^Sample」に格納されていることが分かります。
また、POSTMANで「localhost:3000/dataGet」にアクセスすると、グローバルに格納された値が返ってきました!

以上で簡単ですが、Node.jsとIRISの連携が完了致しました。

次回(その3)」は、他にもあるIRIS連携時のコマンドをご紹介します。

いや、本当に簡単なコードで動きますよね・・・ビックリ