Categories
database Node.js 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