Skip to content

Commit 9887cf0

Browse files
v1rtlv1rtl
authored andcommitted
add donation page and hopelessly trying to guess the proper dispatch algorithm
1 parent 329d476 commit 9887cf0

18 files changed

Lines changed: 956 additions & 102 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ import { logger } from '@tinyhttp/logger'
5555
const app = new App()
5656

5757
app
58+
.use(logger())
5859
.use(function someMiddleware(req, res, next) {
5960
console.log('Did a request')
6061
next()
@@ -65,7 +66,6 @@ app
6566
.get('/page/:page/', (req, res) => {
6667
res.status(200).send(`You just opened ${req.params.page}`)
6768
})
68-
.use(logger())
6969
.listen(3000)
7070
```
7171

examples/auth/index.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,17 @@ import jsonwebtoken from 'jsonwebtoken'
66
const app = new App()
77
const secretToken = 'very secret key'
88

9+
app.use(jwt({ secret: secretToken, algorithm: 'HS256' }))
10+
app.use(bodyParser.urlencoded({ extended: false }))
11+
912
app.get('/', (_req, res) => {
1013
res.send('Go to "/login" page to login')
1114
})
1215

13-
app.use(jwt({ secret: secretToken, algorithm: 'HS256' }))
14-
app.use(bodyParser.urlencoded({ extended: false }))
15-
1616
app.post('/login', (req, res) => {
1717
const { body } = req
1818

19-
console.log(`Received body: ${JSON.stringify(body)}`)
19+
console.log(`Received body: ${req}`)
2020

2121
if (body.user !== 'admin' || body.pwd !== 'admin') {
2222
res.send('Incorrect login')

examples/auth/package.json

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,5 @@
88
"body-parser": "^1.19.0",
99
"jsonwebtoken": "^8.5.1"
1010
},
11-
"type": "module",
12-
"devDependencies": {
13-
"@types/body-parser": "^1.19.0",
14-
"@types/mongodb": "^3.5.25"
15-
}
11+
"type": "module"
1612
}

examples/basic/index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { logger } from '@tinyhttp/logger'
44
const app = new App()
55

66
app
7+
.use(logger())
78
.get('/', (_, res) => void res.send('<h1>Hello World</h1>'))
89
.get('/page/:page/', (req, res) => {
910
res.status(200).send(`
@@ -14,5 +15,5 @@ app
1415
${JSON.stringify(req.params, null, 2)}
1516
`)
1617
})
17-
.use(logger())
18+
1819
.listen(3000)

examples/mongodb/index.js

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
import { App } from '@tinyhttp/app'
33
import dotenv from 'dotenv'
44
import mongodb from 'mongodb'
5-
import { form } from 'body-parsec'
5+
import assert from 'assert'
6+
import * as parser from 'body-parsec'
67

78
dotenv.config()
89

@@ -15,6 +16,7 @@ const client = new mongodb.MongoClient(process.env.DB_URI, {
1516
})
1617
const dbName = 'notes'
1718
client.connect((err) => {
19+
assert.equal(null, err)
1820
console.log('successfully connected with mongodb')
1921
db = client.db(dbName)
2022
})
@@ -29,16 +31,13 @@ app.get('/notes', async (_, res, next) => {
2931
}
3032
})
3133

32-
app.use('/notes', async (req, res, next) => {
33-
await form()(req, res, next)
34-
})
35-
3634
// add new note
3735
app.post('/notes', async (req, res, next) => {
36+
await parser.form()(req, res)
3837
try {
39-
await db.collection('notes').insertOne({ title: req.query.title, desc: req.query.desc })
40-
41-
res.send(`Note with title of "${req.query.title}" has been added`)
38+
const r = await db.collection('notes').insertOne({ title: req.body.title, desc: req.body.desc })
39+
assert.equal(1, r.insertedCount)
40+
res.send(`Note with title of "${req.body.title}" has been added`)
4241
} catch (err) {
4342
next(err)
4443
}
@@ -47,7 +46,8 @@ app.post('/notes', async (req, res, next) => {
4746
// delete note
4847
app.delete('/notes', async (req, res, next) => {
4948
try {
50-
await db.collection('notes').deleteOne({ _id: new mongodb.ObjectId(req.query.id) })
49+
const r = await db.collection('notes').deleteOne({ _id: new mongodb.ObjectId(req.query.id) })
50+
assert.equal(1, r.deletedCount)
5151
res.send(`Note with id of ${req.query.id} has been deleted`)
5252
} catch (err) {
5353
next(err)

examples/mongodb/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"private": true,
44
"type": "module",
55
"dependencies": {
6-
"@tinyhttp/app": "0.2.13",
6+
"@tinyhttp/app": "workspace:*",
77
"body-parsec": "^2.0.12",
88
"dotenv": "^8.2.0",
99
"mongodb": "^3.5.9"

packages/app/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ import { logger } from '@tinyhttp/logger'
5555
const app = new App()
5656

5757
app
58+
.use(logger())
5859
.use(function someMiddleware(req, res, next) {
5960
console.log('Did a request')
6061
next()
@@ -65,7 +66,6 @@ app
6566
.get('/page/:page/', (req, res) => {
6667
res.status(200).send(`You just opened ${req.params.page}`)
6768
})
68-
.use(logger())
6969
.listen(3000)
7070
```
7171

packages/app/package.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@tinyhttp/app",
3-
"version": "0.2.21",
3+
"version": "0.2.24",
44
"description": "tinyhttp core with App, Request, Response and Router",
55
"type": "module",
66
"homepage": "https://github.com/talentlessguy/tinyhttp#readme",
@@ -23,7 +23,9 @@
2323
"./package.json": "./package.json",
2424
"./": "./"
2525
},
26-
"files": ["dist"],
26+
"files": [
27+
"dist"
28+
],
2729
"engines": {
2830
"node": ">=12.x"
2931
},

packages/app/src/app.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,11 @@ export class App extends Router {
7878
const { path, method, handler, type } = mw
7979

8080
if (type === 'route') {
81+
// strip query parameters for req.params
82+
const queryParamStart = req.url.lastIndexOf('?')
83+
const reqUrlWithoutParams = req.url.slice(0, queryParamStart === -1 ? req.url.length : queryParamStart)
84+
8185
if (req.method === method) {
82-
// strip query parameters for req.params
83-
const queryParamStart = req.url.lastIndexOf('?')
84-
const reqUrlWithoutParams = req.url.slice(0, queryParamStart === -1 ? req.url.length : queryParamStart)
8586
if (rg(path).pattern.test(reqUrlWithoutParams)) {
8687
req.params = getURLParams(req.url, path)
8788
req.route = getRouteFromApp(this, handler)
@@ -118,9 +119,9 @@ export class App extends Router {
118119
* @param host server listening host
119120
*/
120121
listen(port?: number, cb?: () => void, host = 'localhost') {
121-
const server = createServer((req: Request, res: Response) => {
122-
this.handler(req, res)
123-
})
122+
const server = createServer()
123+
124+
server.on('request', (req, res) => this.handler(req, res))
124125

125126
return server.listen(port, host, cb)
126127
}

packages/app/src/onError.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,7 @@ import { ErrorHandler } from './router'
33
import { Request } from './request'
44
import { Response } from './response'
55

6-
export const onErrorHandler: ErrorHandler = (
7-
err: any,
8-
_req: Request,
9-
res: Response
10-
) => {
6+
export const onErrorHandler: ErrorHandler = (err: any, _req: Request, res: Response) => {
117
if (!res.headersSent) {
128
const code = (res.statusCode = err.code || err.status || 500)
139
if (typeof err === 'string' || Buffer.isBuffer(err)) res.end(err)

0 commit comments

Comments
 (0)