2015-08-03 11 views
13

Korzystam z poniższego kodu, aby parsować dane json i przechowywać je wewnętrznie w moim module, na przykład gdy serwer jest (jak npm server.js) Używam funkcji parse, który analizuje pliki json.
Na koniec te przeanalizowane jsony są przechowywane w obiekcie configObj i chcę, aby podczas żądania użytkownika (za pośrednictwem ekspresu) uzyskać ten obiekt w module routera lub innych modułach.zapisz obiekt w module i uzyskaj dostęp do niego z różnych modułów

Jak to osiągnąć?

var configObj; 
parse = function() { 
     return fs.readFileAsync(file, 'utf8') 
      .then(function (res) { 
       return JSON.parse(res) 
      }).then(function (jsonObj) { 
       configObj = jsonObj; 
       return jsonObj; 
      }) 
.... 
     }) 
    }; 
    module.exports = { 
     parse: parse, 
     configObj: configObj 
    } 

Funkcja parse jest wywoływana tylko raz i chcę, aby uzyskać dostęp do configObj wiele razy w różnych modułach.

+0

Jeśli dobrze zrozumiałem Twój problem, możesz po prostu "wymagać" tego modułu w każdym pliku i węzeł wykona go tylko za pierwszym razem, a otrzymasz kopię z pamięci podręcznej po tym. –

Odpowiedz

6

Można użyć coś jak node-persist:

var storage = require('node-persist'); 
storage.setItem('config', configObj); 
console.log(storage.getItem('config')); 
+0

Jest na to inny sposób, oprócz trwałości, ponieważ już czytałem pliki w folderze mojej aplikacji (pliki json). –

+0

Przepraszam, ale nie sądzę, że mogę go użyć, ponieważ nie zapewniają żadnej licencji, takiej jak MIT itp. –

+1

Ty może poprosić autora o wypuszczenie go z ważną licencją po prostu upuść linię tutaj https://github.com/simonlast/node-persist/issues –

3

Jeśli używasz wyrazić najlepszym sposobem jest app.set: kiedy wymagają swoją funkcję modułu parse zapisać skutkować na przykład:

app.set("parse.configObj",configObj)

i Uzyskaj go, gdy jest taka potrzeba:

app.get("parse.configObj")

Albo można użyć require.cache zakres po wymagać:

server.js:

var parse = function() { 
     return fs.readFileAsync(file, 'utf8') 
      .then(function (res) { 
       return JSON.parse(res) 
      }).then(function (jsonObj) { 
       if (typeof require.cache.persist === "undefined") { 
        require.cache.persist = {}; 
       } 
       require.cache.persist.configObj = jsonObj; 
       return jsonObj; 
      }) 
    }) 
}; 
module.exports = { parse: parse } 

app.s

var parse = require('./server.js').parse(); 

szlaki/index.js

console.log(require.cache.persist.configObj); 
+0

Dzięki, 1 + czy możesz podać dodatkowe informacje odnośnie drugiej opcji w kontekście mojego post, Z góry dziękuję! –

+0

require.cache ['full/path/to/module']. Persist = { configObj: configObj } to jest mylące, Kiedy to zrobić i jak i jak połączyć się z innym modułem –

+0

@shopiaT zobacz aktualizację –