({ ctx, scriptMap, baseUrl })
| 31 | }) |
| 32 | } |
| 33 | const reqFn = async ({ ctx, scriptMap, baseUrl }) => { |
| 34 | let scriptFilePath |
| 35 | let url = `http://script.hub${ctx.req.url}` |
| 36 | |
| 37 | for (const [k, v] of Object.entries(scriptMap)) { |
| 38 | if (v.test(url)) { |
| 39 | scriptFilePath = k |
| 40 | } |
| 41 | } |
| 42 | |
| 43 | console.log(`url`, url) |
| 44 | console.log(`scriptFilePath`, scriptFilePath) |
| 45 | let $request = { |
| 46 | method: ctx.req.method, |
| 47 | headers: ctx.req.headers, |
| 48 | url, |
| 49 | } |
| 50 | const result = await evalFn({ $request, scriptFilePath }) |
| 51 | // console.log(`result`, result) |
| 52 | ctx.response.status = Number(result?.response?.status || 200) |
| 53 | for (const [k, v] of Object.entries(result?.response?.headers)) { |
| 54 | // if (!/^content-length|content-encoding$/i.test(k)) { |
| 55 | ctx.set(k, v) |
| 56 | // } |
| 57 | } |
| 58 | let body = result?.response?.body |
| 59 | |
| 60 | ctx.body = typeof body === 'string' ? body.replace(/https?:\/\/script.hub\//g, `${baseUrl}/`) : body |
| 61 | } |
| 62 | |
| 63 | const app = new Koa() |
| 64 |
no test coverage detected