Ho uno scenario in cui voglio esportare i dati in CSV dal lato client. Avrò una casella di testo/area o qualsiasi altra cosa in cui l'utente può inserire i dati e quindi idealmente con un clic, un file CSV locale verrà aggiornato con tali dati.Node Modulo JS fs nel browser
Questo è facilmente realizzabile con NodeJS con interazione server e con i suoi moduli principali (in particolare il modulo fs
), ma apparentemente non tanto da un browser.
Ho scoperto che alcuni moduli di nodo (ad esempio underscore
), supportano il metodo RequireJS per far funzionare un particolare modulo nel browser. Così per sottolineatura ho fatto questo:
methods.js
define(['underscore'],function(_) {
var Methods = {
doSomething: function() {
var x = _.size({one: 1, two: 2, three: 3, xuz: 3});
alert(x);
}
};
return Methods;
});
common.js
requirejs.config({
baseURL: 'node_modules',
paths: {
underscore: 'underscore/underscore',
}
});
require(['methods'], function(y){
y.doSomething();
});
index.html
<script data-main="common" src="require.js"></script>
<script>
require(['common'], function() {
require(['methods.js']);
});
</script>
Quanto sopra funziona bene e mostrerà un avviso: 4.
Ma quando provo lo stesso con il modulo fs
non funzionerà. Essa mostra questo errore:
Module name "util" has not been loaded yet for context: _. Use require([])
Per quanto posso capire, questo è perché fs
richiede più moduli, uno dei quali è util
.
Così ho proceduto ad aggiungere tutti questi moduli alla configurazione RequireJS. Ma ancora non ho avuto fortuna, quindi ho provato in modo specifico il modulo util
in quanto questo non sembra richiedere il funzionamento di altri moduli.
e ora sono bloccato su questo errore: Uncaught ReferenceError: exports is not defined
Ho provato modularizzando questo modulo util
incapsulando l'intero codice sorgente del modulo in questo:
define([], function() {})
Ma non ha funzionato neanche .. Ho anche provato a copiare il modello di underscore
ma ancora senza fortuna.
Così mi chiedevo se qualcuno è riuscito a utilizzare util
& fs
moduli (o qualsiasi altro modulo NodeJS core) all'interno del browser con le librerie quali RequireJS o Browserify.
Entrambe le risposte che ho ricevuto sono corrette, come ho scoperto anche dopo ulteriori ricerche. Quello che ho finito per fare il mio specifico scenario però (per tenere tutto lontano dai database e possibilmente lato client per l'utente) sta avendo due server NodeJS in esecuzione (uno per leggere e altro per scrivere). Questi ascoltano le modifiche al file CSV e scriveranno/leggeranno da/verso il file system attraverso il modulo fs NodeJS in questo modo. Questo approccio non è totalmente client-side, ma si evita l'interazione e la manutenzione del DB più tutto è in JS dal client al lato server. – zalow517
Bello! Ho anche trovato informazioni su http://browserify.org/ dal momento della risposta. – FloatingRock