Skip to content

Commit fc08f60

Browse files
committed
refactor: update lowdb and lodash
1 parent 293bac6 commit fc08f60

File tree

8 files changed

+63
-49
lines changed

8 files changed

+63
-49
lines changed

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,15 @@
1616
"errorhandler": "^1.2.0",
1717
"express": "^4.9.5",
1818
"got": "^3.3.0",
19-
"lodash": "^3.9.2",
20-
"lowdb": "^0.10.0",
19+
"lodash": "^4.11.2",
20+
"lowdb": "^0.13.0-beta.2",
2121
"method-override": "^2.1.2",
2222
"morgan": "^1.3.1",
2323
"node-uuid": "^1.4.2",
2424
"object-assign": "^4.0.1",
2525
"pluralize": "^1.1.2",
2626
"server-destroy": "^1.0.1",
27-
"underscore-db": "^0.9.1",
27+
"underscore-db": "^0.10.0",
2828
"update-notifier": "^0.5.0",
2929
"yargs": "^4.2.0"
3030
},

src/cli/run.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,8 +136,12 @@ module.exports = function (argv) {
136136
if (chunk.trim().toLowerCase() === 's') {
137137
var filename = 'db-' + Date.now() + '.json'
138138
var file = path.join(argv.snapshots, filename)
139-
app.db.saveSync(file)
140-
console.log(' Saved snapshot to ' + path.relative(process.cwd(), file) + '\n')
139+
app
140+
.db
141+
.write(file)
142+
.then(function () {
143+
console.log(' Saved snapshot to ' + path.relative(process.cwd(), file) + '\n')
144+
})
141145
}
142146
})
143147

src/cli/utils/load.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
var path = require('path')
22
var got = require('got')
33
var low = require('lowdb')
4+
var fileAsync = require('lowdb/lib/file-async')
45
var is = require('./is')
56

67
module.exports = function (source, cb) {
@@ -27,7 +28,7 @@ module.exports = function (source, cb) {
2728

2829
} else if (is.JSON(source)) {
2930

30-
data = low(source).object
31+
data = low(source, { storage: fileAsync }).object
3132
cb(null, data)
3233

3334
} else {

src/server/mixins.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ function createId (coll) {
4141
if (_.isEmpty(coll)) {
4242
return 1
4343
} else {
44-
var id = _.max(coll, function (doc) {
44+
var id = _.maxBy(coll, function (doc) {
4545
return doc[idProperty]
4646
})[idProperty]
4747

src/server/router/index.js

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ var bodyParser = require('body-parser')
44
var _ = require('lodash')
55
var _db = require('underscore-db')
66
var low = require('lowdb')
7+
var fileAsync = require('lowdb/lib/file-async')
78
var plural = require('./plural')
89
var nested = require('./nested')
910
var singular = require('./singular')
@@ -23,9 +24,9 @@ module.exports = function (source) {
2324
var db
2425
if (_.isObject(source)) {
2526
db = low()
26-
db.object = source
27+
db.state(source)
2728
} else {
28-
db = low(source)
29+
db = low(source, { storage: fileAsync })
2930
}
3031

3132
// Add underscore-db methods to db
@@ -44,7 +45,7 @@ module.exports = function (source) {
4445

4546
// GET /db
4647
function showDatabase (req, res, next) {
47-
res.locals.data = db.object
48+
res.locals.data = db.state()
4849
next()
4950
}
5051

@@ -53,26 +54,24 @@ module.exports = function (source) {
5354
router.use(nested())
5455

5556
// Create routes
56-
for (var prop in db.object) {
57-
var val = db.object[prop]
58-
59-
if (_.isPlainObject(val)) {
60-
router.use('/' + prop, singular(db, prop))
61-
continue
57+
db.forEach(function (value, key) {
58+
if (_.isPlainObject(value)) {
59+
router.use('/' + key, singular(db, key))
60+
return
6261
}
6362

64-
if (_.isArray(val)) {
65-
router.use('/' + prop, plural(db, prop))
66-
continue
63+
if (_.isArray(value)) {
64+
router.use('/' + key, plural(db, key))
65+
return
6766
}
6867

6968
var msg =
70-
'Type of "' + prop + '" (' + typeof val + ') ' +
69+
'Type of "' + key + '" (' + typeof value + ') ' +
7170
(_.isObject(source) ? '' : 'in ' + source) + ' is not supported. ' +
7271
'Use objects or arrays of objects.'
7372

7473
throw new Error(msg)
75-
}
74+
}).value()
7675

7776
router.use(function (req, res) {
7877
if (!res.locals.data) {
@@ -83,5 +82,10 @@ module.exports = function (source) {
8382
router.render(req, res)
8483
})
8584

85+
router.use(function (err, req, res, next) {
86+
console.error(err.stack)
87+
res.status(500).send(err.stack)
88+
})
89+
8690
return router
8791
}

src/server/router/plural.js

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@ module.exports = function (db, name) {
1212
function embed (resource, e) {
1313
e && [].concat(e)
1414
.forEach(function (externalResource) {
15-
if (db.object[externalResource]) {
15+
if (db.get(externalResource).value) {
1616
var query = {}
1717
var singularResource = pluralize.singular(name)
1818
query[singularResource + 'Id'] = resource.id
19-
resource[externalResource] = db(externalResource).where(query)
19+
resource[externalResource] = db.get(externalResource).filter(query).value()
2020
}
2121
})
2222
}
@@ -26,9 +26,9 @@ module.exports = function (db, name) {
2626
e && [].concat(e)
2727
.forEach(function (innerResource) {
2828
var plural = pluralize(innerResource)
29-
if (db.object[plural]) {
29+
if (db.get(plural).value()) {
3030
var prop = innerResource + 'Id'
31-
resource[innerResource] = db(plural).getById(resource[prop])
31+
resource[innerResource] = db.get(plural).getById(resource[prop]).value()
3232
}
3333
})
3434
}
@@ -42,7 +42,7 @@ module.exports = function (db, name) {
4242
function list (req, res, next) {
4343

4444
// Resource chain
45-
var chain = db(name).chain()
45+
var chain = db.get(name)
4646

4747
// Remove q, _start, _end, ... from req.query to avoid filtering using those
4848
// parameters
@@ -66,7 +66,7 @@ module.exports = function (db, name) {
6666
// Automatically delete query parameters that can't be found
6767
// in the database
6868
Object.keys(req.query).forEach(function (query) {
69-
var arr = db(name).value()
69+
var arr = db.get(name).value()
7070
for (var i in arr) {
7171
if (
7272
_.has(arr[i], query) ||
@@ -183,7 +183,7 @@ module.exports = function (db, name) {
183183
var _embed = req.query._embed
184184
var _expand = req.query._expand
185185
var id = utils.toNative(req.params.id)
186-
var resource = db(name).getById(id)
186+
var resource = db.get(name).getById(id).value()
187187

188188
if (resource) {
189189
// Clone resource to avoid making changes to the underlying object
@@ -209,8 +209,9 @@ module.exports = function (db, name) {
209209
req.body[key] = utils.toNative(req.body[key])
210210
}
211211

212-
var resource = db(name)
212+
var resource = db.get(name)
213213
.insert(req.body)
214+
.value()
214215

215216
res.status(201)
216217
res.locals.data = resource
@@ -225,10 +226,13 @@ module.exports = function (db, name) {
225226
}
226227

227228
var id = utils.toNative(req.params.id)
229+
var chain = db.get(name)
228230

229-
var resource = req.method === 'PATCH' ?
230-
db(name).updateById(id, req.body) :
231-
db(name).replaceById(id, req.body)
231+
chain = req.method === 'PATCH' ?
232+
chain.updateById(id, req.body) :
233+
chain.replaceById(id, req.body)
234+
235+
var resource = chain.value()
232236

233237
if (resource) {
234238
res.locals.data = resource
@@ -239,13 +243,13 @@ module.exports = function (db, name) {
239243

240244
// DELETE /name/:id
241245
function destroy (req, res, next) {
242-
var resource = db(name).removeById(utils.toNative(req.params.id))
246+
var resource = db.get(name).removeById(utils.toNative(req.params.id)).value()
243247

244248
// Remove dependents documents
245-
var removable = db._.getRemovable(db.object)
249+
var removable = db._.getRemovable(db.state())
246250

247251
_.each(removable, function (item) {
248-
db(item.name).removeById(item.id)
252+
db.get(item.name).removeById(item.id).value()
249253
})
250254

251255
if (resource) {

src/server/router/singular.js

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,28 @@ module.exports = function (db, name) {
55
var router = express.Router()
66

77
function show (req, res, next) {
8-
res.locals.data = db.object[name]
8+
res.locals.data = db.get(name).value()
99
next()
1010
}
1111

1212
function create (req, res, next) {
13-
res.locals.data = db.object[name] = req.body
13+
db.set(name, req.body).value()
14+
res.locals.data = db.get(name).value()
1415
res.status(201)
1516
next()
1617
}
1718

1819
function update (req, res, next) {
1920
if (req.method === 'PUT') {
20-
delete db.object[name]
21-
db.object[name] = {}
21+
db.set(name, req.body)
22+
.value()
23+
} else {
24+
db.get(name)
25+
.assign(req.body)
26+
.value()
2227
}
2328

24-
for (var prop in req.body) {
25-
db.object[name][prop] = req.body[prop]
26-
}
27-
28-
res.locals.data = db.object[name]
29+
res.locals.data = db.get(name).value()
2930
next()
3031
}
3132

test/server/plural.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -554,9 +554,9 @@ describe('Server', function () {
554554

555555
})
556556

557-
describe('Database #object', function () {
557+
describe('Database state', function () {
558558
it('should be accessible', function () {
559-
assert(router.db.object)
559+
assert(router.db.state())
560560
})
561561
})
562562

@@ -614,11 +614,11 @@ describe('Server', function () {
614614
describe('router.db._.id', function (done) {
615615

616616
beforeEach(function () {
617-
router.db.object = {
617+
router.db.state({
618618
posts: [
619619
{ _id: 1 }
620620
]
621-
}
621+
})
622622

623623
router.db._.id = '_id'
624624
})
@@ -627,7 +627,7 @@ describe('Server', function () {
627627
request(server)
628628
.get('/posts/1')
629629
.expect('Content-Type', /json/)
630-
.expect(router.db.object.posts[0])
630+
.expect(router.db.state().posts[0])
631631
.expect(200, done)
632632
})
633633

0 commit comments

Comments
 (0)