You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

51 lines
926 B

  1. "use strict";
  2. var loki = require('lokijs'),
  3. fs = require("fs"),
  4. path = require("path"),
  5. Promise = require('bluebird'),
  6. _ = require('lodash');
  7. var cols = ['User', 'Entry'];
  8. /**
  9. * Loki.js module
  10. *
  11. * @param {Object} appconfig Application config
  12. * @return {Object} LokiJS instance
  13. */
  14. module.exports = function(appconfig) {
  15. let dbReadyResolve;
  16. let dbReady = new Promise((resolve, reject) => {
  17. dbReadyResolve = resolve;
  18. });
  19. // Initialize Loki.js
  20. let dbModel = {
  21. Store: new loki(path.join(appconfig.datadir.db, 'app.db'), {
  22. env: 'NODEJS',
  23. autosave: true,
  24. autosaveInterval: 5000
  25. }),
  26. onReady: dbReady
  27. };
  28. // Load Models
  29. dbModel.Store.loadDatabase({}, () => {
  30. _.forEach(cols, (col) => {
  31. dbModel[col] = dbModel.Store.getCollection(col);
  32. if(!dbModel[col]) {
  33. dbModel[col] = dbModel.Store.addCollection(col);
  34. }
  35. });
  36. dbReadyResolve();
  37. });
  38. return dbModel;
  39. };