This repository has been archived by the owner on Nov 9, 2017. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
turnout.js
64 lines (51 loc) · 1.42 KB
/
turnout.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
var qs = require('querystring'),
regex = require('./regex'),
url = require('url')
var build = function () {
var routes = {};
new Array('get', 'post', 'put', 'delete').forEach(function (method) {
routes[method] = {}
})
return routes
}
var route = function (req, res, routes, fallback) {
var method = req.method.toLowerCase()
var parsedurl = url.parse(req.url)
var querystring = parsedurl.query
var query = qs.parse(querystring)
var pathname = parsedurl.pathname
var callback = null
var params = {}
Object.keys(routes[method]).forEach(function (route) {
var keys = []
var rexp = regex(route, keys, false, false)
var match = pathname.match(rexp)
if(!match) return
match.shift()
callback = routes[method][route]
match.forEach(function (param, index) {
params[keys[index].name] = param
})
})
if(!callback) fallback()
else callback(req, res, params, query)
}
module.exports = function () {
var routes = build()
var turnout = function (req, res, next) {
route(req, res, routes, next)
}
turnout.get = function (path, callback) {
routes.get[path] = callback
}
turnout.post = function (path, callback) {
routes.post[path] = callback
}
turnout.put = function (path, callback) {
routes.put[path] = callback
}
turnout.del = function (path, callback) {
routes.delete[path] = callback
}
return turnout
}