{"id":13498731,"url":"https://github.com/inlym/koa-to-serverless","last_synced_at":"2025-10-17T02:42:16.074Z","repository":{"id":109750800,"uuid":"287869243","full_name":"inlym/koa-to-serverless","owner":"inlym","description":"只需要改一行代码就能够让你的 Koa 框架应用在 Serverless 架构环境上运行","archived":false,"fork":false,"pushed_at":"2020-09-24T14:00:51.000Z","size":40,"stargazers_count":28,"open_issues_count":6,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-10-31T16:37:45.520Z","etag":null,"topics":["koa","koa-serverless","middleware"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/koa-to-serverless","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/inlym.png","metadata":{"files":{"readme":"README.md","changelog":"HISTORY.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2020-08-16T03:54:43.000Z","updated_at":"2023-02-15T02:46:19.000Z","dependencies_parsed_at":"2023-03-22T00:04:08.149Z","dependency_job_id":null,"html_url":"https://github.com/inlym/koa-to-serverless","commit_stats":{"total_commits":21,"total_committers":2,"mean_commits":10.5,"dds":0.04761904761904767,"last_synced_commit":"9d649e0a499b408b9e38b1fded41e7c6ef370195"},"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inlym%2Fkoa-to-serverless","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inlym%2Fkoa-to-serverless/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inlym%2Fkoa-to-serverless/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inlym%2Fkoa-to-serverless/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/inlym","download_url":"https://codeload.github.com/inlym/koa-to-serverless/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225130723,"owners_count":17425506,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["koa","koa-serverless","middleware"],"created_at":"2024-07-31T21:00:41.816Z","updated_at":"2025-10-17T02:42:11.020Z","avatar_url":"https://github.com/inlym.png","language":"JavaScript","funding_links":[],"categories":["应用场景"],"sub_categories":["其它"],"readme":"\n# koa-to-serverless\n只需要改一行代码就能够让你的 **Koa** 框架应用在 **Serverless** 架构环境上运行。\n\n\n\n## 简介\nServerless 架构相对于自行部署的原生环境有巨大的优势（各云厂商对 Serverless 的介绍已经非常详细，这里就不赘述了），但是已有的代码想要直接迁移到 Serverless 架构上却不容易，主要面临以下几个困难：\n\n（1）Serverless 架构环境与原生环境有所差异，原有的代码无法直接运行。\n\n（2）各云厂商的 Serverless 实现都有所差异，无法兼容。\n\n\n\nkoa-to-serverless 就是为了解决这个问题诞生的。它能够让你只改一行代码就让你的原生 Koa 框架应用在 Serverless 架构环境上运行。\n\n\n\n## 安装\n直接使用 npm 命令安装即可：\n```shell\nnpm i koa-to-serverless\n```\n\n\n\n## 使用\n### 基础\n\n下面这张图表示了使用原生环境和使用 Serverless 环境 Koa 框架代码的区别。虽然说改一行，实际上总共改2行，1行引入，1行使用。其他位置的代码你无需进行任何改动。\n\n![](https://img.inlym.com/516058220fc54b7ca4195d099499ae2e.jpg)\n\n\n\n### 注意事项\n（1）由于已经将请求的 body 植入了 **app.request.body** ，你无需再使用 **koa-bodyparser** 获取 body，请直接\n去掉对应代码。\n\n（2）其他 Koa 的中间件，目前未发现不能使用的。若你在使用中发现某个中间件使用异常，请向我提 issue。\n\n\n\n\n### 扩展\n除了完全兼容 Koa 框架外，koa-to-serverless 还向 Koa 框架的 ctx 参数植入了一些属性，你可以直接使用。例如：ctx.id 。\n\n| 参数名 | 类型 | 说明 |\n| :---: | :---: | :---: |\n| id | string | API网关带入的请求ID |\n\n\n\n\n\n## 配置\n由于云厂商平台限制，部分参数需要在云厂商的 API 网关处进行配置才能获取到。请按照您使用的云厂商平台进行设置。\n\n\n### 阿里云\n以下是 API 网关配置的注意事项：\n\n（1）【请求路径】：配置为【 / 】，并勾选【匹配所有子路径】。路径这块执行逻辑API网关层透传，由 Koa 框架的 koa-router 中间件接管处理。\n\n（2）【HTTP Method】：配置为【ANY】，相当于请求方法也是透传，由 Koa 框架的 koa-router 中间件接管处理。\n\n（3）【入参请求模式】：配置为【入参透传】。\n\n![API网关配置1.png](https://img.inlym.com/10e429f3f9cf45539372a5b7f42514d7.jpg)\n\n\n\n以下几个参数需要 API 网关提供，请直接按照图示参数名称填写。\n\n![API网关配置2.png](https://img.inlym.com/5398e50cd43e48f288015805cbf59065.jpg)\n\n\n\n### 其他云平台\n\n开发中，待支持 ...\n\n\n\n\n\n\n## 进阶\n### 原理剖析\nkoa-to-serverless 实际上使用以下流程给 Koa 框架提供了一个兼容层。\n\n![流程.png](https://img.inlym.com/12095c34ab93416693eff6b03c495b1b.jpg)\n\n\n\n以下这张图可以大致抽象地描述了 koa-to-serverless 作为兼容层提供的能力：\n![](https://img.inlym.com/4d62f7882fc7499db05fcff3ea469113.jpg)\n\n\n\n### 框架扩展\n\n基于以上流程，以后的扩展会非常容易，扩展主要包含2个方面：\n\n（1）支持 Koa 框架在其他云厂商的 Serverless 架构环境上运行。\n\n（2）支持其他框架，例如 Express 等，在 Serverless 架构环境上运行。\n\n\n\n以上2点扩展实际上都非常容易：\n\n（1）第1个扩展只需要增加步骤2对应的触发器处理函数就可以了。\n\n（2）第2个扩展只需要识别框架类型，然后改动步骤4，调用对应的框架的入口函数就可以了。\n\n\n\n以上扩展以后会逐渐支持。\n\n\n\n\n以下是支持情况：\n\n|  |  | Koa |\n| :---: | :---: | :---: |\n| 阿里云 | API 网关触发器 | √ |\n| 阿里云 | HTTP 触发器 |  |\n| 腾讯云 | API 网关触发器 | √ |\n| 华为云 | API 网关触发器 |  |\n| 百度智能云 | API 网关触发器 |  |\n| AWS | API 网关触发器 |  |\n\n\n\n\n\n## 反馈\n任何使用上的问题，以及意见和建议，都可以向我提 issue，地址：\n[https://github.com/inlym/koa-to-serverless/issues](https://github.com/inlym/koa-to-serverless/issues)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finlym%2Fkoa-to-serverless","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Finlym%2Fkoa-to-serverless","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finlym%2Fkoa-to-serverless/lists"}