Update to version 1.1.6
This commit is contained in:
@@ -74,7 +74,7 @@ router.delete('/user/:id', (req, res, next) => {
|
||||
|
||||
// Listen Cloudflare Workers Fetch Event
|
||||
addEventListener('fetch', event => {
|
||||
event.respondWith(router.handle(event))
|
||||
event.respondWith(router.handle(event.request))
|
||||
})
|
||||
```
|
||||
|
||||
|
||||
4
index.d.ts
vendored
4
index.d.ts
vendored
@@ -201,10 +201,10 @@ declare class Router {
|
||||
/**
|
||||
* Handle requests
|
||||
*
|
||||
* @param {Event} event
|
||||
* @param {Request} request
|
||||
* @returns {Response}
|
||||
*/
|
||||
handle(event: Event): Response
|
||||
handle(request: Request): Response
|
||||
}
|
||||
declare namespace Router {
|
||||
export { Route, RouterRequest, RouterResponse, RouterNext, RouterHandler, RouterCorsConfig }
|
||||
|
||||
63
index.js
63
index.js
@@ -291,13 +291,18 @@ class Router {
|
||||
/**
|
||||
* Handle requests
|
||||
*
|
||||
* @param {Event} event
|
||||
* @param {Request} request
|
||||
* @returns {Response}
|
||||
*/
|
||||
async handle(event) {
|
||||
const request = { headers: event.request.headers, method: event.request.method, url: event.request.url, event: event }
|
||||
request.params = []
|
||||
if (request.method === 'OPTIONS' && Object.keys(this.corsConfig).length) {
|
||||
async handle(request) {
|
||||
try {
|
||||
if (request instanceof Event) {
|
||||
request = request.request
|
||||
console.warn("Warning: Using `event` on `router.handle()` is deprecated and might go away in future versions, please use `event.request` instead.")
|
||||
}
|
||||
const req = { headers: request.headers, method: request.method, url: request.url }
|
||||
req.params = []
|
||||
if (req.method === 'OPTIONS' && Object.keys(this.corsConfig).length) {
|
||||
return new Response(null, {
|
||||
headers: {
|
||||
'Access-Control-Allow-Origin': this.corsConfig.allowOrigin,
|
||||
@@ -308,25 +313,31 @@ class Router {
|
||||
status: this.corsConfig.optionsSuccessStatus
|
||||
})
|
||||
}
|
||||
if (['POST', 'PUT', 'PATCH'].includes(request.method)) {
|
||||
if (['POST', 'PUT', 'PATCH'].includes(req.method)) {
|
||||
if (req.headers.has('Content-Type') && req.headers.get('Content-Type').includes('json')) {
|
||||
try {
|
||||
request.body = await event.request.json()
|
||||
req.body = await request.json()
|
||||
} catch {
|
||||
req.body = {}
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
request.body = await event.request.text()
|
||||
} catch {}
|
||||
req.body = await request.text()
|
||||
} catch {
|
||||
req.body = ''
|
||||
}
|
||||
}
|
||||
const route = this.getRoute(request)
|
||||
}
|
||||
const route = this.getRoute(req)
|
||||
if (!route) {
|
||||
return new Response(this.debugMode ? 'Route not found!' : '', {
|
||||
return new Response(this.debugMode ? 'Route not found!' : null, {
|
||||
status: 404
|
||||
})
|
||||
}
|
||||
const response = { headers: {} }
|
||||
const res = { headers: {} }
|
||||
if (Object.keys(this.corsConfig).length) {
|
||||
response.headers = {
|
||||
...response.headers,
|
||||
res.headers = {
|
||||
...res.headers,
|
||||
'Access-Control-Allow-Origin': this.corsConfig.allowOrigin,
|
||||
'Access-Control-Allow-Methods': this.corsConfig.allowMethods,
|
||||
'Access-Control-Allow-Headers': this.corsConfig.allowHeaders,
|
||||
@@ -334,27 +345,27 @@ class Router {
|
||||
}
|
||||
}
|
||||
let prevIndex = -1
|
||||
try {
|
||||
const runner = async index => {
|
||||
if (index === prevIndex)
|
||||
throw new Error('next() called multiple times')
|
||||
prevIndex = index
|
||||
if (typeof route.handlers[index] === 'function')
|
||||
await route.handlers[index](request, response, async () => await runner(index + 1))
|
||||
await route.handlers[index](req, res, async () => await runner(index + 1))
|
||||
}
|
||||
await runner(0)
|
||||
} catch(err) {
|
||||
return new Response(this.debugMode ? err.stack : '', {
|
||||
status: 500
|
||||
})
|
||||
if (typeof res.body === 'object') {
|
||||
if (!res.headers['Content-Type'])
|
||||
res.headers['Content-Type'] = 'application/json'
|
||||
res.body = JSON.stringify(res.body)
|
||||
}
|
||||
const headers = Object.assign({ 'Content-Type': 'application/json' }, response.headers)
|
||||
if (headers['Content-Type'].includes('json') && typeof response.body === 'object')
|
||||
response.body = JSON.stringify(response.body)
|
||||
return new Response(response.body, {
|
||||
status: response.status || (response.body ? 200 : 500),
|
||||
headers
|
||||
return new Response(res.body, {
|
||||
status: res.status || (res.body ? 200 : 204),
|
||||
headers: res.headers
|
||||
})
|
||||
} catch(err) {
|
||||
console.error(err)
|
||||
return new Response(this.debugMode ? err.stack : '', { status: 500 })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@tsndr/cloudflare-worker-router",
|
||||
"version": "1.1.5",
|
||||
"version": "1.1.6",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"scripts": {},
|
||||
|
||||
Reference in New Issue
Block a user