2
2
3
3
const http = require ( 'node:http' ) ;
4
4
5
+ const answerNotFound = ( res , headers ) => {
6
+ res . writeHead ( 404 , headers ) ;
7
+ res . end ( 'Not found' ) ;
8
+ } ;
9
+
5
10
const receiveArgs = async ( req ) => {
6
11
const buffers = [ ] ;
7
12
for await ( const chunk of req ) buffers . push ( chunk ) ;
@@ -10,22 +15,34 @@ const receiveArgs = async (req) => {
10
15
} ;
11
16
12
17
module . exports = ( routing , port , console ) => {
13
- http . createServer ( async ( req , res ) => {
14
- const { url, socket } = req ;
15
- const [ name , method , id ] = url . substring ( 1 ) . split ( '/' ) ;
16
- const entity = routing [ name ] ;
17
- if ( ! entity ) return void res . end ( 'Not found' ) ;
18
- const handler = entity [ method ] ;
19
- if ( ! handler ) return void res . end ( 'Not found' ) ;
20
- const src = handler . toString ( ) ;
21
- const signature = src . substring ( 0 , src . indexOf ( ')' ) ) ;
22
- const args = [ ] ;
23
- if ( signature . includes ( '(id' ) ) args . push ( id ) ;
24
- if ( signature . includes ( '{' ) ) args . push ( await receiveArgs ( req ) ) ;
25
- console . log ( `${ socket . remoteAddress } ${ method } ${ url } ` ) ;
26
- const result = await handler ( ...args ) ;
27
- res . end ( JSON . stringify ( result . rows ) ) ;
28
- } ) . listen ( port ) ;
18
+ http
19
+ . createServer ( async ( req , res ) => {
20
+ const headers = {
21
+ 'Access-Control-Allow-Origin' :
22
+ '*' /* @dev First, read about security */ ,
23
+ 'Access-Control-Allow-Methods' : 'POST' ,
24
+ 'Access-Control-Max-Age' : 2592000 , // 30 days
25
+ /** add other headers as per requirement */
26
+ } ;
27
+
28
+ const { url, socket } = req ;
29
+ const [ name , method , id ] = url . substring ( 1 ) . split ( '/' ) ;
30
+ const entity = routing [ name ] ;
31
+ if ( ! entity ) return void answerNotFound ( res , headers ) ;
32
+ const handler = entity [ method ] ;
33
+ if ( ! handler ) return void answerNotFound ( res , headers ) ;
34
+
35
+ res . writeHead ( 200 , headers ) ;
36
+ const src = handler . toString ( ) ;
37
+ const signature = src . substring ( 0 , src . indexOf ( ')' ) ) ;
38
+ const args = [ ] ;
39
+ if ( signature . includes ( '(id' ) ) args . push ( id ) ;
40
+ args . push ( ...( await receiveArgs ( req ) ) ) ;
41
+ console . log ( `${ socket . remoteAddress } ${ req . method } ${ url } ` ) ;
42
+ const result = await handler ( ...args ) ;
43
+ res . end ( JSON . stringify ( result . rows ) ) ;
44
+ } )
45
+ . listen ( port ) ;
29
46
30
47
console . log ( `API on port ${ port } ` ) ;
31
48
} ;
0 commit comments