-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathindex.js
86 lines (73 loc) · 2.11 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/**
* Session store for Connect/Express, backed by nedb
*
* Usage:
* var connect = require('connect')
* , session = connect.session
* , NedbStore = require('connect-nedb-session')(session);
*
* Or:
* var express = require('express')
* , session = express.session
* , NedbStore = require('connect-nedb-session')(session);
*
* Or (express 4.x):
* var express = require('express')
* , session = require('express-session')
* , NedbStore = require('connect-nedb-session')(session);
*
* Then:
* server.use(session({
* secret : 'yoursecret',
* key : 'yoursessionkey',
* cookie : {
* path : '/',
* httpOnly : true,
* maxAge : 365 * 24 * 3600 * 1000 // One year for example
* },
* store : new NedbStore({ filename : 'path_to_nedb_persistence_file' })
* }));
*/
var Nedb = require('nedb');
module.exports = function (session) {
/**
* Constructor
* @param {String} options.filename File where session data will be persisted
* @param {Function} cp Optional callback (useful when testing)
*/
function NedbStore(options, cb) {
var callback = cb || function () {};
this.filename = options.filename;
this.db = new Nedb(options.filename);
this.db.loadDatabase(callback);
}
// Inherit from Connect's session store
NedbStore.prototype.__proto__ = session.Store.prototype;
/**
* Get session data
*/
NedbStore.prototype.get = function (sid, callback) {
this.db.findOne({ sid: sid }, function (err, sess) {
if (err) { return callback(err); }
if (!sess) { return callback(null, null); }
return callback(null, sess.data);
});
};
/**
* Set session data
*/
NedbStore.prototype.set = function (sid, data, callback) {
this.db.update({ sid: sid }, { sid: sid, data: data }, { multi: false, upsert: true }, function (err) {
return callback(err);
});
};
/**
* Destroy a session's data
*/
NedbStore.prototype.destroy = function (sid, callback) {
this.db.remove({ sid: sid }, { multi: false }, function (err) {
return callback(err);
});
};
return NedbStore;
};