03 - Open Source03b - Node.js

Node.js – Ejs applicazione Web IBM i

Last Updated on 8 Febbraio 2020 by Roberto De Pedrini

Introduzione

Node.js è un runtime di JavaScript Open source multipiattaforma orientato agli eventi per l’esecuzione di codice JavaScript, costruito sul motore JavaScript V8 di Google Chrome.  In questo documento illustreremo sinteticamente come eseguire una semplice applicazione web node.js all’interno dell’ambiente pase di Ibm.

Per prima cosa andremo ad installare i pacchetti open source tramite Access Client Solution.

IBM i Access Client Solutions offre un’interfaccia indipendente dalla piattaforma basata su Java, che può essere eseguita sulla maggior parte dei sistemi operativi che supportano Java, tra cui Linux, Mac e Windows. IBM i Access Client Solutions raccoglie le attività utilizzate più comunemente per la gestione di IBM i in un’unica ubicazione semplificata.

Da questo link si trovano tutte le informazioni utili per installare e gestire l’ambiente opensource per IbmI.
https://bitbucket.org/ibmi/opensource/src/e9ab9d2e8c1cc1f96b4dd4bd9801d8f8ddf9c8e8/docs/yum/

Express

Dopo aver installato nodejs, ci collegheremo all’ambiente pase per installare express.js, un microframework che consente di generare percorsi (url) più facilmente e di utilizzare dei template.
Il collegamento avviene attraverso il richiamo del programma qp2term o tramite la sessione putty presente in una della funzioni dell’access client solution.

  • npm install express
  • npm install -g express-generator (genera la base per progetti perfettamente funzionanti)
  • express –view=ejs (genera il pacchetto dell’applicazione con tutte le cartelle necessarie, da lanciare dentro la nuova cartella)
  • npm install  (per installare tutte le dipendenze dopo aver installato l’applicazione ejs)
  • DEBUG =appjson:* npm start (questo comando verrà lanciato nella shell e farà partire l’applicazione nel server http)
Apri il browser e vai all’indirizzo IP del proprio IbmI: comparirà il benvenuto a express

Database

Installare idb-connector
Node.js iDB Connector è un IBM i Node.js Db2 driver open source project from IBM.

npm install idb-connector

Applicazione

View

Inserire nella cartella express View il codice html che avrà come estensione .ejs
Da notare nel formato html le specifiche con “%”; sono i campi passati come request al browser da node

<!DOCTYPE html>
<html>
  <head>
    <title><%= title %></title>
    <link rel='stylesheet' href='/stylesheets/style.css' />
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap-theme.min.css">

  </head>
  <body>
    <h1><%= title %></h1>
    <p>Welcome to <%= title %></p>
    <table class="table table-dark">
  <thead>
    <tr>
      <th scope="col">Nr</th>
      <th scope="col">Conto</th>
      <th scope="col">Descrizione</th>
      <th scope="col">Importo</th>
    </tr>
  </thead>
  <tbody>
    <% if(data.length){

for(var i = 0; i< data.length; i++) {%>
<tr>
  <th scope="row"><%= (i+1) %></th>
  <td><%= data[i].COD%></td>
  <!-- <td><%= data[i].DES%></td> -->
  <td><%= data[i].IMPO%></td>
  <td>
  <a class="btn btn-success edit" href="../customers/edit/<%=data[i].id%>">Edit</a>
  <a class="btn btn-danger delete" onclick="return alert('Are You sure?')" href="../customers/delete/<%=data[i].id%>">Delete</a>
 </td>
</tr>
<% }

 }else{ %>
     <tr>
        <td colspan="3">No user</td>
     </tr>
  <% } %>
  </tbody>
</table>
  </body>
</html>

Implementare l’index.js per inserire altri routing all’applicazione base.
Nel routing nella pagina sono implementati le connessioni al database e l’accesso sql. I dati vengono restituiti nel formato json.

var express = require('express');
 var router = express.Router();
 /* GET home page. */
 router.get('/', function(req, res, next) {
   res.render('index', { title: 'Express' });
 });
 
 /* GET new page  */
 router.get('/analisi', function(req, res, next) {
 const idbc=require("idb-connector");
 const dbconn=new idbc.dbconn();
 dbconn.conn("*LOCAL"); //connessione  db
 const dbstmt=new idbc.dbstmt(dbconn);
   dbstmt.exec('select cliente cod , ragioneSoc des, sum(impofc) Imponibile from libreria.file1  
    inner join libreria.file2 on cliente=cliente2 group by conffc, dscocp',
  function(rows,err)    {
    if(err){      
            console.log('err');   
           res.render('analisi',{title:"Customers - Ejs - Node.js",data:''});  
           }else
      {console.log(rows);     
/* restituzione della pagina con le rows dell'sql */
res.render('analisi',{title:"Customers - Ejs -Node.js",data:(rows)});     }      }); });
 module.exports = router;

Applicazione web

DEBUG =appjson:* npm start (questo comando verrà lanciato nella shell e farà partire l’applicazione nel server http)

Conclusione

Ecco, abbiamo appena creato una piccola applicazione per la gestione di una lista di dati.
Node è adatto per strutturare le applicazioni basate su servizi.
l vantaggio più evidente di Node.js è la possibilità di realizzare applicazioni server-side senza dover imparare linguaggi di programmazione “tradizionali”. Ciò permette agli utenti meno esperti, come ad esempio chi si occupa solo di programmazione lato frontend, di realizzare applicazioni Web multiutente gestendo la logica lato server. In altre parole Node.js permette di scrivere codice JavaScript come se fosse un linguaggio di programmazione di pagine dinamiche, realizzando tutto ciò che di solito richiede l’utilizzo di PHP, JSP, ASP o altre tecnologie equivalenti.

Related Posts
DB2 for i SQL – Stringhe – POSSTR-LOCATE-LOCATE_IN_STRING (IT)

Introduzione Spesso, nelle nostre applicazioni, abbiamo la necessità di lavorare con le stringhe di testo e l'SQL del DB2 può Read more

DB2 for i & SQL – FAQ & Howto (Part. 1) (IT)

Database DB2 e SQL ... forse lo strumento più potente e completo che abbiamo sulla piattaforma IBM i: ecco una Read more

Annuncio IBM i 7.4

Arriva direttamente con l'uovo di Pasqua questo annuncio IBM per le novità della versione IBM i 7.4, versione iNext secondo Read more

Generated Always Columns – Approfondimenti (IT)

Introduzione "Generated Always Column": sono colonne, campi, di una tabella il cui contenuto è controllato direttamente dal sistema ... e Read more

About author

Project manager, consulente aziendale gestionale, sviluppo applicazioni con Rpgfree , Python, JavaScript. Sono entrato nel mondo IT quando è nato l'As400 , sono un sostenitore della piattaforma Ibm-I e delle sue enormi potenzialità e credo nelle risorse offerte dalla comunità dell'open source. Sono grato di collaborare con FAQ400 perchè condivido pienamente gli obiettivi.

4 Comments

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *