UNPKG

lowkie

Version:

My Custom lowkie / Express Applcation

141 lines (119 loc) 4.39 kB
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>JSDoc: Source: connect.js</title> <script src="scripts/prettify/prettify.js"> </script> <script src="scripts/prettify/lang-css.js"> </script> <!--[if lt IE 9]> <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> </head> <body> <div id="main"> <h1 class="page-title">Source: connect.js</h1> <section> <article> <pre class="prettyprint source linenums"><code>'use strict'; const path = require('path'); const fs = require('fs-extra'); const loki = require('lokijs'); const lokiFSAdapter = require('lokijs/src/loki-fs-structured-adapter.js'); const defaultDBPath = path.resolve(path.join(process.cwd(), './test.db.json')); /** * connects lowkie to lokijs * * @param {string} [dbpath=defaultDBPath] * @param {object} [options={}] * @returns {Promise} */ function connect(dbpath = defaultDBPath, options = {}, lowkieConfig = {}) { this.config = Object.assign(this.config, lowkieConfig); const dbname = path.resolve(dbpath); const adapter = (this.config.adapterType === 'file') ? { adapter: new lokiFSAdapter(dbname), } : {}; const lokiDBOptions = Object.assign({ autosave: true, autosaveInterval: 5000, // 5 seconds }, adapter, options); const t = setImmediate(() => { this.connection.emit('connecting', { dbname, options, }); clearImmediate(t); }); const db = new loki(dbname, lokiDBOptions); const ensureAdapterFilePromise = () => { if (!this.config.adapterType) { return Promise.reject(new Error('Invalid Adapter Type')); } else { return (this.config.adapterType === 'file') ? new Promise((resolve, reject) => { fs.ensureFile(dbname, (err) => { if (err) reject(err); else resolve(true); }); }) : Promise.resolve(); } }; this.db = db; this.connections.set('default', db); return new Promise((resolve, reject) => { try { let t = setImmediate(() => { ensureAdapterFilePromise() .then(() => { fs.readJSON(dbname, (err, dbdata) => { clearImmediate(t); if (this.config.overwriteInvalidJSON &amp;&amp; err || ( dbdata &amp;&amp; (!dbdata.collections || !dbdata.collections.length)) ) { db.saveDatabase((err) => { if (err) { reject(err); } else { this.connection.emit('connected', db, { db, options, }); resolve(db); } }); } else if (err) { reject (err); } else{ db.loadDatabase({}, (err) => { if (err) { reject(err); } else { this.connection.emit('connected', db, { db, options, }); resolve(db); } }); } }); }) .catch((e) => { this.connection.emit('connectionError', e, { dbname, options, }); reject(e); }); }); } catch (e) { this.connection.emit('connectionError', e, { dbname, options, }); reject(e); } }); } module.exports = connect;</code></pre> </article> </section> </div> <nav> <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="lowkie.html">lowkie</a></li><li><a href="lowkie.lowkie.html">lowkie</a></li><li><a href="lowkieSchema.html">lowkieSchema</a></li><li><a href="ObjectId.html">ObjectId</a></li></ul><h3>Global</h3><ul><li><a href="global.html#connect">connect</a></li><li><a href="global.html#handler">handler</a></li><li><a href="global.html#model">model</a></li></ul> </nav> <br class="clear"> <footer> Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a> on Mon Mar 27 2017 21:39:17 GMT-0400 (EDT) </footer> <script> prettyPrint(); </script> <script src="scripts/linenumber.js"> </script> </body> </html>