Skip to content

Commit 649a448

Browse files
committed
Barely started on routes
1 parent 9cafec9 commit 649a448

2 files changed

Lines changed: 26 additions & 10 deletions

File tree

index.js

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,50 @@
11
'use strict'
22

33
// setup
4-
const uws = require('uws')
5-
const http = uws.http
4+
const http = require('http')
65
const port = process.env.PORT || process.env.port || 8091
76

87
// globals
98
let server
9+
let base = ''
10+
let baseRgx = new RegExp('.*')
11+
let resourceRgx = new RegExp('a^')
12+
let resources = {}
1013

1114
// exports
1215
module.exports = {register, start, logger, _find, _findAll, _create, _save}
1316

1417
// register resource
1518
function register (name, opts) {
1619
if (!name) return Promise.reject(new Error(`no name specified in register`))
17-
let r = {name}
18-
return r
20+
return new Promise((resolve, reject) => {
21+
let r = resources[name] = {name}
22+
resourceRgx = new RegExp(`/${Object.keys(resources).join('|/')}(\\/|\\?|$)`)
23+
return resolve(r)
24+
})
1925
}
2026

2127
// start server
2228
function start (opts = {}) {
29+
base = opts.base
30+
baseRgx = new RegExp(`^/?${base}`)
2331
return new Promise((resolve, reject) => {
2432
server = http.createServer(handleRequest)
2533
server.listen(opts.port || port)
26-
console.log(server)
27-
resolve(server)
34+
return resolve(server)
2835
})
2936
}
3037

38+
// handle 404
39+
function fourOhFour (res) {
40+
res.statusCode = 404
41+
res.end('no match for requested route')
42+
}
43+
3144
// request handler
3245
function handleRequest (req, res) {
33-
console.log('got request')
46+
let url = req.url
47+
if (!baseRgx.test(url) || !resourceRgx.test(url)) return fourOhFour(res)
3448
res.end(`world`)
3549
}
3650

test/index.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,17 @@ import patty from './../index'
66
import axios from 'axios'
77

88
test('server starts and accepts messages', async (assert) => {
9-
let opts = {port: 8092}
9+
let opts = {port: 8092, base: '/api'}
10+
let reqPath = `api/user?first=andrew&last=carpenter&zip=37615&zip=37601`
11+
await patty.register('user')
1012
await assert.notThrows(patty.start(opts), 'start does not throw')
11-
let res = await axios.get(`http://localhost:${opts.port}/hello`)
13+
let res = await axios.get(`http://localhost:${opts.port}/${reqPath}`)
1214
assert.is(res.data, 'world')
1315
})
1416

1517
test('register returns resource object', async (assert) => {
1618
await assert.throws(patty.register(), Error, 'register throws with no name')
17-
let resource = await patty.register('users')
19+
let resource = await patty.register('user')
1820
assert.truthy(resource, 'resource is defined')
1921
assert.truthy(resource.hasOwnProperty('name'), 'resource has name')
2022
// assert.truthy(resource.hasOwnProperty('search'), 'resource has search')

0 commit comments

Comments
 (0)