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
- https://www.cancellino.org/2023/04/database-remoto-1/ [↩]