{"id":13750068,"url":"https://github.com/Lxxyx/koa2-easy","last_synced_at":"2025-05-09T15:31:33.348Z","repository":{"id":143882935,"uuid":"56896613","full_name":"Lxxyx/koa2-easy","owner":"Lxxyx","description":"Easy way to use koa2","archived":true,"fork":false,"pushed_at":"2018-04-22T02:46:57.000Z","size":223,"stargazers_count":111,"open_issues_count":0,"forks_count":25,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-05-08T23:57:47.974Z","etag":null,"topics":["easy-to-use","koa"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Lxxyx.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2016-04-23T02:38:49.000Z","updated_at":"2025-03-03T06:35:26.000Z","dependencies_parsed_at":"2024-01-30T03:01:44.107Z","dependency_job_id":null,"html_url":"https://github.com/Lxxyx/koa2-easy","commit_stats":null,"previous_names":[],"tags_count":29,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lxxyx%2Fkoa2-easy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lxxyx%2Fkoa2-easy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lxxyx%2Fkoa2-easy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lxxyx%2Fkoa2-easy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Lxxyx","download_url":"https://codeload.github.com/Lxxyx/koa2-easy/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253275604,"owners_count":21882334,"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":["easy-to-use","koa"],"created_at":"2024-08-03T08:00:20.980Z","updated_at":"2025-05-09T15:31:33.051Z","avatar_url":"https://github.com/Lxxyx.png","language":"JavaScript","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"readme":"## 注意：\n请使用Node6以上版本，获得更好的性能与ES6支持。\n启用Babel-es2017，不再对一些Node6已支持的特性转码。\n\n## 起因\n因为Koa2已经在蓬勃发展中，Async/Await能切实的避免回调地狱。所以基于Koa2订制了一套模板。\n\n全局安装koa2-easy，之后使用koa2命令即可在当前目录一键生成服务端程序。地址为：当前目录/koa2-easy\n\n\n```\nnpm i koa2-easy -g\n\nkoa2\n\ncd koa2-easy \u0026\u0026 npm i （推荐使用cnpm）\n```\n\n## 功能\n1. 渲染模板（[artTemplate](https://github.com/Lxxyx/koa-artTemplate)）\n2. 发送静态文件，如HTML文件。\n3. 编写自定义路由与Restful Api，默认支持CORS跨域\n4. 读取post数据\n5. 纯ES6/7编写，使用koa2的Async/Await，避免回调地狱\n6. 默认支持gzip，减少传输体积，加快传输速度\n7. 支持文件上传\n8. 开箱即用，无需折腾\n9. 支持TypeScript模板\n\n## 启动\n直接运行run.js即可  \n因为Koa2使用babel和ES7的Async/Await，所以需要使用babel转译启动，所以必须运行run.js，而非app.js。   \n```\nnode run.js\n```\n### 开发模式\n检测到文件变动，会自动重启服务器  \n```\nnpm i\nnpm run dev\n```\n### 服务器部署\n```\nnpm i pm2 -g\nnpm run pm2\n```\n### 指定端口启动\n```\nPORT=8000 npm run dev\nPORT=8000 npm run pm2\n```\n把8000替换成任何你想使用的端口即可\n\n### 配合Nginx实现反向代理（可选）\n推荐使用[VeryNginx](https://github.com/alexazhou/VeryNginx)实现。\n\u003e 具体配置（需要先安装VeryNginx）：\n先配置一个 Matcher ： host=app.xxxx.com ，用来提取出来所有访问 host 为 **app.xxxx.com** 的请求 \n然后配置 Proxy Pass 把这个请求转发到 127.0.0.1:3000 就可以了\n\n## 使用\n需要具有ES6基础。\n\n### 模板渲染\n```javascript\n// router/index.js\nrouter\n  .get('/', async ctx =\u003e {\n    // 模板渲染，第一个参数为模板名称\n    // 模板放置于views文件夹中\n    ctx.body = ctx.render('index', { title: 'Koa2-Easy' })\n  })\n```\n### 发送静态HTML文件\n```javascript\n// router/index.js\nrouter\n  .get('/index', async (ctx, next) =\u003e {\n    // 发送静态文件\n    await ctx.send(ctx, 'index.html', { root: 'static/index' })\n  })\n```\n### HTML文件中，静态文件的路径处理\n把HTML文件放入static文件夹中。单独开辟文件夹。  \n如首页index.html，则放入/static/index文件夹。引用CSS等文件时，需加入文件夹名称。\n```html\n\u003c!-- /static/index/index.html --\u003e\n\u003clink rel=\"stylesheet\" type=\"text/css\" href=\"/index/css/index.css\"\u003e\n```\n### 发送JSON数据\n直接将ctx.body设置为json格式即可\n\n```javascript\n// router/test.js\nrouter\n  .get('/json', (ctx, next) =\u003e {\n    ctx.body = { test: 'json' }\n  })\n```\n### 读取post数据\nctx.request.body就是post发送的数据\n\n```javascript\n// router/test.js\nrouter\n  .post('/post', (ctx, next) =\u003e {\n    ctx.body = ctx.request.body\n  })\n```\n### 添加新路由\n按照router文件夹中范例编写，并在app.js中添加即可。\n\n```javascript\n// 添加/api路由\n\n// 将api前缀设置为/api\nconst router = new Router({\n  prefix: '/api'\n})\n\n// 对Api进行操作\nrouter\n  .get('/', (ctx, next) =\u003e {\n    ctx.body = \"This is Api page\"\n  })\n```\n\n```javascript\n// 在app.js中引用\nimport api from './router/api'\napp.use(api.routes())\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FLxxyx%2Fkoa2-easy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FLxxyx%2Fkoa2-easy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FLxxyx%2Fkoa2-easy/lists"}