{"id":20783309,"url":"https://github.com/soraping/koa-ts","last_synced_at":"2025-10-14T18:33:59.971Z","repository":{"id":122503584,"uuid":"82262511","full_name":"soraping/koa-ts","owner":"soraping","description":"koa2+typescript","archived":false,"fork":false,"pushed_at":"2018-07-14T00:59:48.000Z","size":44,"stargazers_count":88,"open_issues_count":0,"forks_count":15,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-05-01T07:47:33.419Z","etag":null,"topics":["koa","koa2","mongodb","typescript","vscode"],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","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/soraping.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,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2017-02-17T05:56:43.000Z","updated_at":"2024-11-18T03:14:38.000Z","dependencies_parsed_at":null,"dependency_job_id":"44e99171-c5c4-4162-a59a-42674cdc8cac","html_url":"https://github.com/soraping/koa-ts","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/soraping/koa-ts","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soraping%2Fkoa-ts","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soraping%2Fkoa-ts/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soraping%2Fkoa-ts/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soraping%2Fkoa-ts/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/soraping","download_url":"https://codeload.github.com/soraping/koa-ts/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soraping%2Fkoa-ts/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279020353,"owners_count":26086866,"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","status":"online","status_checked_at":"2025-10-14T02:00:06.444Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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","koa2","mongodb","typescript","vscode"],"created_at":"2024-11-17T14:18:13.585Z","updated_at":"2025-10-14T18:33:59.966Z","avatar_url":"https://github.com/soraping.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"## koa+typescript\n\n\u003e **新项目，更加轻量，更加简单，[请移步 lenneth](https://github.com/soraping/lenneth)**\n\n\u003e - 框架: koa+tyescript\n\u003e - db: mongodb\n\u003e - 编辑器: vscode\n\u003e - 测试: mocha\n\u003e - 项目地址: https://github.com/soraping/koa-ts.git\n\n### 项目下载安装模块\n\n```bash\n    git clone https://github.com/soraping/koa-ts.git\n    cd koa-ts\n    npm install\n```\n\n### vscode debug 配置\n\n在.vscode 文件夹中，修改 launch.json 文件\n\n```JavaScript\n{\n    \"version\": \"0.2.0\",\n    \"configurations\": [\n        {\n            \"name\": \"koa2\",\n            \"type\": \"node\",\n            \"request\": \"launch\",\n            \"program\": \"${workspaceRoot}/src/index.ts\",\n            \"stopOnEntry\": false,\n            \"args\": [],\n            \"cwd\": \"${workspaceRoot}\",\n            \"outFiles\": [\"${workspaceRoot}/build/**/*.js\"],\n            \"runtimeExecutable\": \"nodemon\",\n            \"runtimeArgs\": [\n                \"--nolazy\"\n            ],\n            \"env\": {\n                \"NODE_ENV\": \"development\"\n            },\n            \"externalConsole\": false,\n            \"sourceMaps\": true,\n            \"restart\": true\n        }\n    ]\n}\n```\n\n注意，在属性'runtimeExecutable'处我选用 nodemon 检测 ts 编译后的 js 文件，‘restart’属性选择 true\n根目录下 nodemon.json 文件就是 nodemon 的配置文件，要配置所要检测的文件夹，否则会默认检测这个项目，影响性能\n\n### tsconfig.json 文件文件配置\n\n```JavaScript\n{\n    \"compileOnSave\": false,\n    \"compilerOptions\": {\n        \"module\": \"commonjs\",       // 模块引入方式\n        \"target\": \"ES6\",            // 将ts文件转成es6的js代码\n        // 当 noImplicitAny 标志为 true 的时候，TypeScript 编译器不能推断类型，它仍然生成 JavaScript 文件，但是报告一个错误。\n        \"noImplicitAny\": true,\n        \"sourceMap\": true,          // 开启sourceMap\n        \"preserveConstEnums\": true,\n        \"emitDecoratorMetadata\": true,   // 开启修饰器\n        \"experimentalDecorators\": true,  // 开启修饰器\n        \"removeComments\": true,\n        \"rootDir\": \"./src\",   // tsc目标文件夹\n        \"outDir\": \"./build\"   // tsc输出文件夹\n    },\n    // atom\n    \"atom\": {\n        \"rewriteTsconfig\": true\n    },\n    // 不需要监控编译的目录\n    \"exclude\": [\n        \"node_modules\",\n        \"build\"\n    ],\n    // 需要ts编译的文件集合\n    \"include\": [\n        \"./src/typdts/*/*.d.ts\",\n        \"./src/apis/*.ts\"\n    ],\n    // 需要ts编译的文件绝对路径\n    \"files\": [\n        \"./src/index.ts\"\n    ],\n    \"filesGlob\": [\n        \"./src/**/*.ts\"\n    ]\n}\n```\n\n### 项目配置文件\n\n```JavaScript\n// config.json\n{\n    \"port\": \"8083\",          // 端口\n    \"log\": {\n        \"log_name\": \"log\",   // 日志名称\n        \"log_path\": \"logs/\"  // 日志路径\n    },\n    \"mongo\": {\n        \"development\": {\n            \"host\": \"mongodb://localhost:27017/ts-test\"\n        },\n        \"production\": {\n            \"host\": \"\"\n        }\n    },\n    \"session\": {\n        \"secrets\": \"koa-ts\"\n    },\n    \"jwt\": {\n        \"secret\": \"koa-ts-jwt\"\n    }\n}\n```\n\n### 开发\n\n参照了网上的一些案例，进行了整理，利用 es7 的 Decorator 把 koa-router 做了一些封装\n\n```JavaScript\nimport {router, required, prefix, convert, log} from '../middleware/router';\n// api path\n@prefix('/user')\nclass UserController{\n\n    // 访问路径就是/user/findOne/zhangsan\n    @router({\n        method: 'get',\n        path: '/findOne/:username',\n        unless: true   //如果不做jwt校验，则把这个字段置为true，默认校验\n    })\n    // 必传参数 {params: ...,query:...}\n    @required({params: 'username'})\n    // 中间件，api执行前会调用someFun方法\n    @convert(someFun)\n    // 日志\n    @log\n    async getUserOne (ctx: IRouterContext): Promise\u003cvoid\u003e {\n        let user = await UserModel.findOne({username: ctx.params.username});\n        ctx.body = user;\n    }\n}\n```\n\n设计 api 时可以按照上述写法，这样写就更加的优雅\n\n### 启动\n\n首先要确认 mongodb 是开启状态\n\n```bash\nnpm run build  # 启动tsc编译监控\n```\n\n点击 vscode 默认 debug 键, enjoy!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoraping%2Fkoa-ts","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsoraping%2Fkoa-ts","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoraping%2Fkoa-ts/lists"}