-
Notifications
You must be signed in to change notification settings - Fork 0
/
exampleServer.js
81 lines (65 loc) · 1.96 KB
/
exampleServer.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
#! /usr/bin/env node
/**
* Example server as module imports, geolocation and maps (when not configured) won't work on file: protocol
* Based on [https://developer.mozilla.org/en-US/docs/Learn/Server-side/Node_server_without_framework]
*/
const fs = require('fs')
const fsPromises = fs.promises
const http = require('http')
const listenOptions = {
port: 3000,
host: '127.0.0.1',
}
// Create an instance of the http server to handle HTTP requests
const server = http.createServer(async (request, response) => {
/** @type {string} Response content type */
let contentType
/** @type {Buffer|string} Response body */
let body
// Expand base url
const filePath = request.url === '/' ? '/examples/index.html' : request.url
// Set mime type and check whitelist
switch (filePath) {
case '/examples/index.html':
contentType = 'text/html'
break
case '/dist/gmaps-overlay-mylocation.css':
contentType = 'text/css'
break
case '/src/index.js':
case '/dist/gmaps-overlay-mylocation.js':
case '/dist/gmaps-overlay-mylocation.es.js':
case '/dist/gmaps-overlay-mylocation.umd.js':
case '/dist/gmaps-overlay-mylocation.iife.js':
contentType = 'text/javascript'
break
default:
response
.writeHead(404)
.end()
return
}
// Read file
try {
body = await fsPromises.readFile(`.${filePath}`)
} catch (error) {
response
.writeHead(error.code === 'ENOENT' ? 404 : 500)
.end()
return
}
// Replace env variables in html files
if (process.env.GOOGLE_MAPS_KEY && contentType === 'text/html') {
body = body
.toString()
.replace(/\bGOOGLE_MAPS_KEY\b/g, process.env.GOOGLE_MAPS_KEY)
}
response
.writeHead(200, {'content-type': contentType})
.end(body, 'utf-8')
})
// Start the server on port 3000
server.listen(listenOptions, () => {
const { address, port } = server.address()
console.info(`Node server running on ${address}:${port}`)
})