Skip to content

Commit 5f48d54

Browse files
substacksubstack
substack
authored and
substack
committed
modular http server using the routes package
1 parent a8d88cd commit 5f48d54

File tree

1 file changed

+29
-7
lines changed

1 file changed

+29
-7
lines changed

node/modular-http-server/server.js

+29-7
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,38 @@ var http = require('http')
22
var fs = require('fs')
33
var ecstatic = require('ecstatic')
44
var st = ecstatic(__dirname + '/public')
5+
var router = require('routes')()
56
var count = 0
67

8+
router.addRoute('GET /', function (req, res, m) {
9+
res.setHeader('content-type', 'text/html')
10+
res.end(`<h1>HOWDY</h1>
11+
<div>you are the ${count++}th visitor</div>
12+
<div>sign my guestbook</div>
13+
<form action="/guestbook" method="POST">
14+
<input type="text" placeholder="your name"
15+
name="name">
16+
<textarea name="msg"></textarea>
17+
</form>
18+
`)
19+
})
20+
router.addRoute('POST /guestbook', function (req, res, m) {
21+
var w = fs.createWriteStream('guestbook.txt', { flags: 'a+' })
22+
req.pipe(w, { end: false })
23+
req.on('end', function () { w.end('\n') })
24+
w.on('error', function (err) {
25+
res.statusCode = 500
26+
res.end(err + '\n')
27+
})
28+
w.on('finish', function () {
29+
res.end('thank you for signing my guestbook\n')
30+
})
31+
})
32+
733
var server = http.createServer(function (req, res) {
834
console.log(req.method, req.url)
9-
if (req.method === 'GET' && req.url === '/') {
10-
res.setHeader('content-type', 'text/html')
11-
res.end(`<h1>HOWDY</h1>
12-
<div>you are the ${count++}th visitor</div>
13-
<div>sign my guestbook</div>
14-
`)
15-
} else st(req, res)
35+
var m = router.match(req.method + ' ' + req.url)
36+
if (m) m.fn(req, res, m)
37+
else st(req, res)
1638
})
1739
server.listen(3000)

0 commit comments

Comments
 (0)