Skip to content

Commit a15ceb9

Browse files
committed
Adds in routing functionality.
1 parent 728dd39 commit a15ceb9

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed

Section 3/app/index.js

+62
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
const http = require("http");
2+
var url = require("url");
3+
const StringDecoder = require("string_decoder").StringDecoder
4+
5+
const server = http.createServer(function(req, res) {
6+
const {
7+
pathname: path,
8+
query: queryStringObj
9+
} = url.parse(req.url, true);
10+
const headers = req.headers
11+
const method = req.method.toLowerCase();
12+
const trimmedPath = path.replace(/^\/+|\/+$/g,'');
13+
const decoder = new StringDecoder('utf-8');
14+
let buffer = '';
15+
req.on('data', function(data) {
16+
buffer += decoder.write(data);
17+
})
18+
req.on('end', function() {
19+
buffer += decoder.end()
20+
const choosenPath = typeof(router[trimmedPath]) !== 'undefined' ? router[trimmedPath] : handlers.notFound;
21+
var data = {
22+
trimmedPath,
23+
queryStringObj,
24+
method,
25+
headers,
26+
payload: buffer
27+
}
28+
29+
choosenPath(data, function(statusCode, payload) {
30+
statusCode = typeof(statusCode) == 'number' ? statusCode : 200;
31+
payload = typeof(payload) == 'object' ? payload : {};
32+
var payloadString = JSON.stringify(payload)
33+
res.writeHead(statusCode)
34+
res.end(payloadString)
35+
console.log(`request received on path: ${trimmedPath}
36+
with method: ${method}
37+
and query parameters: ${JSON.stringify(queryStringObj)}
38+
with headers: ${JSON.stringify(headers)} and payload is: ${buffer} and response values are:
39+
${statusCode} and payload: ${payloadString}`);
40+
})
41+
})
42+
})
43+
44+
server.listen(3000, function() {
45+
console.log("Server is listening on port 3000 now.")
46+
})
47+
48+
// Define handlers
49+
const handlers = {}
50+
51+
handlers.sample = function(data, callback) {
52+
callback(406, { name: 'Sample Handler' })
53+
}
54+
55+
// Not Found Handler
56+
handlers.notFound = function(data, callback) {
57+
callback(404);
58+
}
59+
// Defining request router
60+
const router = {
61+
'sample': handlers.sample
62+
}

0 commit comments

Comments
 (0)