Persistenza dei dati in Node.js ed Electron con NeDB

Mattepuffo's logo
Persistenza dei dati in Node.js ed Electron con NeDB

Persistenza dei dati in Node.js ed Electron con NeDB

Anche le applicazioni fatte con Electron e Node.js possono avere la necessità di salvare i dati in maniera persistente.

Tra le varie soluzioni possibili, oggi vediamo NeDB, un db scritto tutto in Javascript.

Io l'ho aggiunto direttamente come dipendenza del mio package.json:

  "devDependencies": {
    "electron": "^3.0.4",
    "nedb": "*"
  }

NeDB ci permette di lavorare sia con db in-memory che su file; nel primo caso non dobbiamo specificare nulla:

var Datastore = require('nedb');
var db = new Datastore({autoload: true});

Nel secondo dobbiamo specificare il path del file; se non esiste, viene creato in automatico:

var Datastore = require('nedb');
var db = new Datastore({filename: './user.db', autoload: true});

Qua sotto il codice della mia applicazione Electron, che fa alcune operazioni automatiche dopo che la finestra viene lanciata:

const {app, BrowserWindow} = require('electron');
let mainWindow;
var Datastore = require('nedb');
var db = new Datastore({filename: './user.db', autoload: true});
db.ensureIndex({fieldName: 'nome', unique: true}, function (err) {
    if (err) {
        console.log(err);
    }
});

function createWindow() {
    mainWindow = new BrowserWindow({
        width: 1000,
        height: 800,
        minWidth: 700,
        minHeight: 500
    });
    mainWindow.setMenu(null);
    mainWindow.loadFile('index.html');
    mainWindow.on('closed', function () {
        mainWindow = null
    });

    var test = {
        nome: 'matteo',
        email: 'email@email.com',
        website: 'https://www.mattepuffo.com',
        hobbies: ['sport', 'informatica']
    }
    db.insert(test, function (err, newDoc) {
        if (err) {
            console.log(err);
        }
        console.log(newDoc);
    });
    db.find({}, function (err, docs) {
        if (err) {
            console.log(err);
        }
        console.log(docs);
    });
    db.find({nome: 'matteo'}, function (err, docs) {
        if (err) {
            console.log(err);
        }
        console.log(docs);
    });
    db.find({nome: 'luca'}, function (err, docs) {
        if (err) {
            console.log(err);
        }
        console.log(docs);
    });
}

app.on('ready', createWindow);

app.on('window-all-closed', function () {
    if (process.platform !== 'darwin') {
        app.quit();
    }
});

app.on('activate', function () {
    if (mainWindow === null) {
        createWindow();
    }
});

Io ho anche creato un indice univoco usando la funzione ensureIndex.

Sotto, aggiungo dei dati, e li interrogo con la funzione find.

Al secondo avvio, verrà dato un errore, in quanto troverà un valore già inserito.

Se non gli vengono passati argomenti, verrà fatta una query su tutti i records.

Potete vedere sulla documentazione per tutte le altre operazioni.

Enjoy!


Condividi

Commentami!