lowkie
Version:
My Custom lowkie / Express Applcation
141 lines (119 loc) • 4.39 kB
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 && err || ( dbdata && (!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>