File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff 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
Original file line number Diff line number Diff line change @@ -2,6 +2,7 @@ const url = require('url')
22const { send, createError, sendError } = require ( 'micro' )
33
44const db = require ( './db' )
5+ const { pushView } = require ( './utils' )
56
67module . 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 }
Original file line number Diff line number Diff line change 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
You can’t perform that action at this time.
0 commit comments