PASE環境

6. NODE.JS

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開発することができるようになる。
_