Categories
database Node.js npm package,json React

Database remoto (3)

Si può usare un’applicazione JavaScript (Node.js) per accedere al DBMS Apache Cassandra. Infatti, di solito, il DBMS deve essere protetto, quindi NON è esposto sulla rete pubblica. Per lo stesso motivo, il server DBMS e il server Node.js si trovano nella stessa rete locale.

Si veda prima l’articolo su come installare Cassandra e come creare un nuovo utente amministratore1.

L’applicazione node.js che si sta per implementare è considerata di tipo back-end, e si può usare un framework come React

Ci sono varie librerie per usare Cassandra all’interno di Node.js.

Se si vuole realizzare un progetto React, questa soluzione pronta, è abbastanza utile:

.
+ ── dist
+ ── config
+ ── server
├─── .babelrc
├─── webpack.config.server.js
├─── package.json
└─── template.js

Per installare le dipendenze del progetto, dopo averlo decompresso:

npm install

Nel codice sorgente è necessario creare un file ./template.js

// ./template.js

export default () => {
    return `<!DOCTYPE html>
      <html lang="en">
        <head>
          <meta charset="utf-8">
          <title>C-assandra-ERN Kickstart</title>
        </head>
        <body>
          <div id="root"></div>
          <script type="text/javascript" src="/dist/bundle.js"></script>
        </body>
      </html>`
}

È necessario creare anche un file ./server/server.js, per istruire il web server Express

// ./server/server.js

import {config} from '../config/config.js';
import express from 'express';
import template from '../template.js';
import {cassandraClient} from  '../db/cassandraClient.js';

const db = cassandraClient();
const app = express();

app.get('/', (req, res) => {
  res.status(200).send(template())
})

let port = process.env.PORT || 3000
app.listen(port, function onStart(err) {
  if (err) {
    console.log(err)
  }
  console.info('Web server started on port %s.', port)
})

Per la configurazione del server ./config/config.js

// ./config/config.js

const config = {
  cassandraIP: '172.17.0.2',
  cassandraPort: 9042,
  datacenter: 'datacenter1',
  cassandraUser: 'utente',
  cassandraSecret: 'segretoXX'
 }

export {config};

Per la connessione da Node.js al DBMS Cassandra, modificare ./server/db/cassandraClient.js

// ./server/db/cassandraClient.js

import expressCassandra from 'express-cassandra';
import {config} from '../config/config.js';

function cassandraClient () {
  try {
    const cassandraClient = new expressCassandra.createClient({
      clientOptions: {
      contactPoints: [config.cassandraIP],
      localDataCenter: config.datacenter,
      protocolOptions: { port: config.cassandraPort },
      queryOptions: {consistency: expressCassandra.consistencies.one},
      socketOptions: { readTimeout: 60000 },
      authProvider: new expressCassandra.driver.auth.PlainTextAuthProvider(config.cassandraUser, config.cassandraSecret)
      },
      ormOptions: {
        defaultReplicationStrategy: {
          class: 'SimpleStrategy',
          replication_factor: 1 
        },
        migration: 'safe',
      }
    });
    console.info('Web server started on port %s.', config.cassandraPort)
  } catch (err) {
	  console.error(err);
  }
}

export {cassandraClient};

Per compilare un unico bundle

npm run build

Per avviare il server

npm run start

Aprendo il browser su questo indirizzo, apparirà qualcosa nel terminale.

http://localhost:3000
  1. https://www.cancellino.org/2023/04/database-remoto-1/ []

Leave a Reply