Skip to content

Commit d0359f8

Browse files
committed
Standalone pushView, fix inc-false on non-existant paths
1 parent 209710a commit d0359f8

3 files changed

Lines changed: 34 additions & 30 deletions

File tree

src/db.js

Lines changed: 1 addition & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -15,31 +15,4 @@ const promisifiedDb = {
1515
close: db.close.bind(db),
1616
}
1717

18-
// Atomic view pushing method, can safely be called multiple times without the
19-
// db messing up.
20-
const pushView = async (key, view) => {
21-
const locks = {}
22-
await push()
23-
24-
async function push() {
25-
if (locks[key]) return setImmediate(push)
26-
locks[key] = true
27-
28-
let views
29-
if (promisifiedDb.has(key)) {
30-
views = promisifiedDb.get(key).views
31-
} else {
32-
views = []
33-
}
34-
35-
try {
36-
await promisifiedDb.put(key, { views: views.concat([view]) })
37-
delete locks[key]
38-
} catch (err) {
39-
throw err
40-
}
41-
}
42-
}
43-
44-
module.exports = exports = promisifiedDb
45-
exports.pushView = pushView
18+
module.exports = promisifiedDb

src/index.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ const url = require('url')
22
const { send, createError, sendError } = require('micro')
33

44
const db = require('./db')
5+
const { pushView } = require('./utils')
56

67
module.exports = async function (req, res) {
78
const { pathname, query } = url.parse(req.url, /* parseQueryString */ true)
@@ -28,10 +29,10 @@ module.exports = async function (req, res) {
2829
try {
2930
// Add a view and send the total views back to the client
3031
if (shouldIncrement) {
31-
await db.pushView(pathname, { time: Date.now() })
32+
await pushView(pathname, { time: Date.now() })
3233
}
3334
if (req.method === 'GET') {
34-
send(res, 200, { views: db.get(pathname).views.length })
35+
send(res, 200, { views: db.has(pathname) ? db.get(pathname).views.length : 0 })
3536
} else {
3637
send(res, 200)
3738
}

src/utils.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
const db = require('./db')
2+
3+
// Atomic view pushing method, can safely be called multiple times without the
4+
// db messing up.
5+
const pushView = async (key, view) => {
6+
const locks = {}
7+
await push()
8+
9+
async function push() {
10+
if (locks[key]) return setImmediate(push)
11+
locks[key] = true
12+
13+
let views
14+
if (db.has(key)) {
15+
views = db.get(key).views
16+
} else {
17+
views = []
18+
}
19+
20+
try {
21+
await db.put(key, { views: views.concat([view]) })
22+
delete locks[key]
23+
} catch (err) {
24+
throw err
25+
}
26+
}
27+
}
28+
29+
module.exports = exports
30+
exports.pushView = pushView

0 commit comments

Comments
 (0)