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
|
// Listen Cloudflare Workers Fetch Event
|
||||||
addEventListener('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
|
* Handle requests
|
||||||
*
|
*
|
||||||
* @param {Event} event
|
* @param {Request} request
|
||||||
* @returns {Response}
|
* @returns {Response}
|
||||||
*/
|
*/
|
||||||
handle(event: Event): Response
|
handle(request: Request): Response
|
||||||
}
|
}
|
||||||
declare namespace Router {
|
declare namespace Router {
|
||||||
export { Route, RouterRequest, RouterResponse, RouterNext, RouterHandler, RouterCorsConfig }
|
export { Route, RouterRequest, RouterResponse, RouterNext, RouterHandler, RouterCorsConfig }
|
||||||
|
|||||||
111
index.js
111
index.js
@@ -261,7 +261,7 @@ class Router {
|
|||||||
* Get Route by request
|
* Get Route by request
|
||||||
*
|
*
|
||||||
* @private
|
* @private
|
||||||
* @param {Request} request
|
* @param {Request} request
|
||||||
* @returns {Route|undefined}
|
* @returns {Route|undefined}
|
||||||
*/
|
*/
|
||||||
getRoute(request) {
|
getRoute(request) {
|
||||||
@@ -291,70 +291,81 @@ class Router {
|
|||||||
/**
|
/**
|
||||||
* Handle requests
|
* Handle requests
|
||||||
*
|
*
|
||||||
* @param {Event} event
|
* @param {Request} request
|
||||||
* @returns {Response}
|
* @returns {Response}
|
||||||
*/
|
*/
|
||||||
async handle(event) {
|
async handle(request) {
|
||||||
const request = { headers: event.request.headers, method: event.request.method, url: event.request.url, event: event }
|
try {
|
||||||
request.params = []
|
if (request instanceof Event) {
|
||||||
if (request.method === 'OPTIONS' && Object.keys(this.corsConfig).length) {
|
request = request.request
|
||||||
return new Response(null, {
|
console.warn("Warning: Using `event` on `router.handle()` is deprecated and might go away in future versions, please use `event.request` instead.")
|
||||||
headers: {
|
}
|
||||||
|
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,
|
||||||
|
'Access-Control-Allow-Methods': this.corsConfig.allowMethods,
|
||||||
|
'Access-Control-Allow-Headers': this.corsConfig.allowHeaders,
|
||||||
|
'Access-Control-Max-Age': this.corsConfig.maxAge
|
||||||
|
},
|
||||||
|
status: this.corsConfig.optionsSuccessStatus
|
||||||
|
})
|
||||||
|
}
|
||||||
|
if (['POST', 'PUT', 'PATCH'].includes(req.method)) {
|
||||||
|
if (req.headers.has('Content-Type') && req.headers.get('Content-Type').includes('json')) {
|
||||||
|
try {
|
||||||
|
req.body = await request.json()
|
||||||
|
} catch {
|
||||||
|
req.body = {}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
req.body = await request.text()
|
||||||
|
} catch {
|
||||||
|
req.body = ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const route = this.getRoute(req)
|
||||||
|
if (!route) {
|
||||||
|
return new Response(this.debugMode ? 'Route not found!' : null, {
|
||||||
|
status: 404
|
||||||
|
})
|
||||||
|
}
|
||||||
|
const res = { headers: {} }
|
||||||
|
if (Object.keys(this.corsConfig).length) {
|
||||||
|
res.headers = {
|
||||||
|
...res.headers,
|
||||||
'Access-Control-Allow-Origin': this.corsConfig.allowOrigin,
|
'Access-Control-Allow-Origin': this.corsConfig.allowOrigin,
|
||||||
'Access-Control-Allow-Methods': this.corsConfig.allowMethods,
|
'Access-Control-Allow-Methods': this.corsConfig.allowMethods,
|
||||||
'Access-Control-Allow-Headers': this.corsConfig.allowHeaders,
|
'Access-Control-Allow-Headers': this.corsConfig.allowHeaders,
|
||||||
'Access-Control-Max-Age': this.corsConfig.maxAge
|
'Access-Control-Max-Age': this.corsConfig.maxAge,
|
||||||
},
|
}
|
||||||
status: this.corsConfig.optionsSuccessStatus
|
|
||||||
})
|
|
||||||
}
|
|
||||||
if (['POST', 'PUT', 'PATCH'].includes(request.method)) {
|
|
||||||
try {
|
|
||||||
request.body = await event.request.json()
|
|
||||||
} catch {
|
|
||||||
try {
|
|
||||||
request.body = await event.request.text()
|
|
||||||
} catch {}
|
|
||||||
}
|
}
|
||||||
}
|
let prevIndex = -1
|
||||||
const route = this.getRoute(request)
|
|
||||||
if (!route) {
|
|
||||||
return new Response(this.debugMode ? 'Route not found!' : '', {
|
|
||||||
status: 404
|
|
||||||
})
|
|
||||||
}
|
|
||||||
const response = { headers: {} }
|
|
||||||
if (Object.keys(this.corsConfig).length) {
|
|
||||||
response.headers = {
|
|
||||||
...response.headers,
|
|
||||||
'Access-Control-Allow-Origin': this.corsConfig.allowOrigin,
|
|
||||||
'Access-Control-Allow-Methods': this.corsConfig.allowMethods,
|
|
||||||
'Access-Control-Allow-Headers': this.corsConfig.allowHeaders,
|
|
||||||
'Access-Control-Max-Age': this.corsConfig.maxAge,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
let prevIndex = -1
|
|
||||||
try {
|
|
||||||
const runner = async index => {
|
const runner = async index => {
|
||||||
if (index === prevIndex)
|
if (index === prevIndex)
|
||||||
throw new Error('next() called multiple times')
|
throw new Error('next() called multiple times')
|
||||||
prevIndex = index
|
prevIndex = index
|
||||||
if (typeof route.handlers[index] === 'function')
|
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)
|
await runner(0)
|
||||||
} catch(err) {
|
if (typeof res.body === 'object') {
|
||||||
return new Response(this.debugMode ? err.stack : '', {
|
if (!res.headers['Content-Type'])
|
||||||
status: 500
|
res.headers['Content-Type'] = 'application/json'
|
||||||
|
res.body = JSON.stringify(res.body)
|
||||||
|
}
|
||||||
|
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 })
|
||||||
}
|
}
|
||||||
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
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@tsndr/cloudflare-worker-router",
|
"name": "@tsndr/cloudflare-worker-router",
|
||||||
"version": "1.1.5",
|
"version": "1.1.6",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"scripts": {},
|
"scripts": {},
|
||||||
|
|||||||
Reference in New Issue
Block a user