PASE環境に 5733 OPS(=Open Source Project) として
NODE.JS も同梱されている。(ノード・ジェイエス)
_
NODE.JS とは ロンドンIBMが開発したサーバー・サイドで動作するJavaScriptである。
JavaScriptはWebデザイナーを始めとしてフロント・エンジニアに
普及しているブラウザ上でHTMLの内部で動作するスクリプトである。
WebデザイナーでもJavaScriptを扱えないと仕事にはならないような
時代ではあるがやはりWebデザイナーはJavaScriptのロジックを
読んで学習しない人がまだ多い。
そこでフロント・エンジニアと称する技術者が生まれて
この人たちはJavaScrptを専門に開発する部隊である。
ある年配のIBM技術者に「JavaScriptの経験ありますか?」と尋ねたところ
「Javaはまだやっていません。」というトンチンカンな答えが返ってきたことが
あるがJavaScriptのことを略して「Java」と称するることは間違ってもない。
( JS と略すことはある )
_
JavaとJavaScriptとは全くの別物なので間違ってもJavaScriptのことを
Javaとは言わないように。
JavaScriptとはJavaによく似た文法で記述できるスクリプト言語である。
筆者は最後に生き残る言語はJavaScriptだと思っていたが
PythonがリリースされてJavaScrptに代わって勢いが変わった。
さて NODE.JS の起動はPythonなどと同じように
CALL QP2TERM で PASE環境を起動してから
NODE /NODE/SAMPLE.JS
のようにして実行することができる。
ここで紹介するサンプルの SAMPLE.JS はIBMが用意したDB2/400データ・ベースへ
アクセスする
/QOpenSys/QIBM/ProdData/OPS/Node6/os400/db2i/lib/db2a
をrequireでインクルードすることによってデータ・ベースをSQLデアクセスすることができる。
[ SAMPLE.JS ]
/ db2a モジュールを読み込む。
const {
dbconn,
dbstmt,
} = require('/QOpenSys/QIBM/ProdData/OPS/Node6/os400/db2i/lib/db2a');
// db2 に接続する。
const connection = new dbconn();
connection.conn('*LOCAL');
// SQL を実行する。
const statement = new dbstmt(connection);
statement.exec("SELECT * FROM QTRFIL.SHOHIN LEFT JOIN QTRFIL.HINSHU ON SHSCOD = HNSCOD", rows => {
// 1 行ずつ出力する。
for(const row of rows) {
console.log(row);
}
// 接続を閉じる。
statement.close();
connection.disconn();
connection.close();
});
[実行結果]
{ SHCODE: 'NV-BS30S ',
SHNAME: ' 目次ビデオ ',
SHTANK: '165000',
SHSCOD: '0002',
HNSCOD: '0002',
HNSNAM: ' ビデオデッキ ' }
{ SHCODE: 'NV-BS50S ',
SHNAME: ' ビデオ画王 ',
SHTANK: '200000',
SHSCOD: '0002',
HNSCOD: '0002',
HNSNAM: ' ビデオデッキ ' }
{ SHCODE: 'NV-CF1 ',
SHNAME: ' Cカセット編集ビデオ ',
SHTANK: '58000',
SHSCOD: '0002',
HNSCOD: '0002',
HNSNAM: ' ビデオデッキ ' }
{ SHCODE: 'NV-CF2 ',
SHNAME: ' 薄型テレビ ',
SHTANK: '98000',
SHSCOD: '0003',
HNSCOD: '0003',
HNSNAM: ' コンボ ' }
{ SHCODE: 'NV-CF81 ',
SHNAME: ' 更新テスト ',
SHTANK: '58000',
SHSCOD: '0004',
HNSCOD: '0004',
HNSNAM: ' エレクトーン ' }
{ SHCODE: 'NV-CF9 ',
SHNAME: ' 漢字テスト ',
SHTANK: '19000',
SHSCOD: '0002',
HNSCOD: '0002',
HNSNAM: ' ビデオデッキ ' }
{ SHCODE: 'NV-F850 ',
SHNAME: ' 音声録画ビデオ ',
SHTANK: '140000',
SHSCOD: '0002',
HNSCOD: '0002',
HNSNAM: ' ビデオデッキ ' }
{ SHCODE: 'NV-HK1 ',
SHNAME: ' 歌えるビデオ ',
SHTANK: '90000',
SHSCOD: '0002',
HNSCOD: '0002',
HNSNAM: ' ビデオデッキ ' }
{ SHCODE: 'NV-H1T-S ',
SHNAME: ' みんなのビデオ ',
SHTANK: '69800',
SHSCOD: '0002',
HNSCOD: '0002',
HNSNAM: ' ビデオデッキ ' }
{ SHCODE: 'NV-SX10 ',
SHNAME: ' ビデオ画王 ',
SHTANK: '115000',
SHSCOD: '0002',
HNSCOD: '0002',
HNSNAM: ' ビデオデッキ ' }
{ SHCODE: 'NV-W1 ',
SHNAME: ' 世界放送方式ビデオ ',
SHTANK: '350000',
SHSCOD: '0002',
HNSCOD: '0002',
HNSNAM: ' ビデオデッキ ' }
{ SHCODE: 'RX-AZ1 ',
SHNAME: ' 液晶テレビ 80 インチ ',
SHTANK: '300000',
SHSCOD: '0001',
HNSCOD: '0001',
HNSNAM: ' カラーTV ' }
{ SHCODE: 'RX-BZ1 ',
SHNAME: ' 液晶テレビ 55 インチ ',
SHTANK: '100000',
SHSCOD: '0002',
HNSCOD: '0002',
HNSNAM: ' ビデオデッキ ' }
{ SHCODE: 'RX-DT75 ',
SHNAME: ' CDラジオカセット ',
SHTANK: '53800',
SHSCOD: '0003',
HNSCOD: '0003',
HNSNAM: ' コンボ ' }
{ SHCODE: 'SC-CH150 ',
SHNAME: ' 超ミニ・コンポ ',
SHTANK: '70000',
SHSCOD: '0003',
HNSCOD: '0003',
HNSNAM: ' コンボ ' }
{ SHCODE: 'SC-CH505 ',
SHNAME: ' パーソナル・ミニコンポ ',
SHTANK: '100000',
SHSCOD: '0003',
HNSCOD: '0003',
HNSNAM: ' コンボ ' }
{ SHCODE: 'SC-CH655 ',
SHNAME: ' ロングプレイ・コンポ ',
SHTANK: '129000',
SHSCOD: '0003',
HNSCOD: '0003',
HNSNAM: ' コンボ ' }
{ SHCODE: 'SC-CH950 ',
SHNAME: ' ドルビー・ミニコンポ ',
SHTANK: '162000',
SHSCOD: '0003',
HNSCOD: '0003',
HNSNAM: ' コンボ ' }
{ SHCODE: 'SF-SDCD ',
SHNAME: 'FFFFFAABBCCDD ',
SHTANK: '19800',
SHSCOD: '0002',
HNSCOD: '0002',
HNSNAM: ' ビデオデッキ ' }
{ SHCODE: 'TH-19VS30 ',
SHNAME: ' コンパクトTVBS19 ',
SHTANK: '120000',
SHSCOD: '0001',
HNSCOD: '0001',
HNSNAM: ' カラーTV ' }
{ SHCODE: 'TH-21VS30 ',
SHNAME: ' コンパクトTVBS21 ',
SHTANK: '128000',
SHSCOD: '0001',
HNSCOD: '0001',
HNSNAM: ' カラーTV ' }
{ SHCODE: 'TH-25GF10 ',
SHNAME: ' 衛星放送内蔵TV25 ',
SHTANK: '168000',
SHSCOD: '0001',
HNSCOD: '0001',
HNSNAM: ' カラーTV ' }
{ SHCODE: 'TH-25GV10 ',
SHNAME: ' ビデオ内蔵型TV25 ',
SHTANK: '255000',
SHSCOD: '0001',
HNSCOD: '0001',
HNSNAM: ' カラーTV ' }
{ SHCODE: 'TH-25VS30 ',
SHNAME: ' コンパクトTVBS25 ',
SHTANK: '11300',
SHSCOD: '0001',
HNSCOD: '0001',
HNSNAM: ' カラーTV ' }
{ SHCODE: 'TH-29GF10 ',
SHNAME: ' カラーTV画王BS29 ',
SHTANK: '220000',
SHSCOD: '0001',
HNSCOD: '0001',
HNSNAM: ' カラーTV ' }
{ SHCODE: 'TH-29GV10 ',
SHNAME: ' ビデオ内蔵型TV29 ',
SHTANK: '280000',
SHSCOD: '0001',
HNSCOD: '0001',
HNSNAM: ' カラーTV ' }
{ SHCODE: 'TH-33VS35 ',
SHNAME: ' カラーTV画王BS33 ',
SHTANK: '350000',
SHSCOD: '0001',
HNSCOD: '0001',
HNSNAM: ' カラーTV ' }
[解説]
DB2/400にアクセスしているのは
statement.exec("SELECT * FROM QTRFIL.SHOHIN LEFT JOIN QTRFIL.HINSHU ON SHSCOD = HNSCOD"
の部分でライブラリーQTRFILのSHOHIN(商品マスター) を QTRFIL.HINSHU(品種マスター)と結合して
表示している。
このように JavaScriptでデータ・ベースをアクセスすることができれば
JavaScriptだけの知識で CGIを作ってWeb開発することができるようになる。
_
