{"id":13715104,"url":"https://github.com/sunkuo/grow-to-express","last_synced_at":"2025-04-09T07:10:34.164Z","repository":{"id":143819253,"uuid":"113052925","full_name":"sunkuo/grow-to-express","owner":"sunkuo","description":"渐进式Express学习课程，从零开始实现一个Express","archived":false,"fork":false,"pushed_at":"2018-03-30T09:12:58.000Z","size":22,"stargazers_count":353,"open_issues_count":1,"forks_count":68,"subscribers_count":27,"default_branch":"master","last_synced_at":"2025-04-02T05:08:06.850Z","etag":null,"topics":["expressjs","nodejs","source-code"],"latest_commit_sha":null,"homepage":null,"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/sunkuo.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}},"created_at":"2017-12-04T14:29:02.000Z","updated_at":"2025-03-30T16:34:27.000Z","dependencies_parsed_at":"2023-04-22T10:20:08.394Z","dependency_job_id":null,"html_url":"https://github.com/sunkuo/grow-to-express","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunkuo%2Fgrow-to-express","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunkuo%2Fgrow-to-express/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunkuo%2Fgrow-to-express/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunkuo%2Fgrow-to-express/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sunkuo","download_url":"https://codeload.github.com/sunkuo/grow-to-express/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247994122,"owners_count":21030050,"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":["expressjs","nodejs","source-code"],"created_at":"2024-08-03T00:00:54.158Z","updated_at":"2025-04-09T07:10:34.144Z","avatar_url":"https://github.com/sunkuo.png","language":"JavaScript","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"readme":"**渐进式Express源码学习| 小白也能懂源码**\n\n这个系列教程的目的是用一种**渐进式**的方式，**帮助Node/Javascript工程师更快更容易得理解Express工作机制**。 所谓的渐进式，就是从最简单的web服务器，一步一步添枝加叶，最后形成一个完整Express的过程。\n\n### 缘起\n\n接触Express已有两年多时间，也面试了很多Node工程师。我发现很多工程师会用Express，但是不知道Express如何工作，稍微深入一点的面试问题就答不上来，例如：\n\n- 严格路由和不严格路由有什么区别\n- 如何设置路由不敏感或严格路由\n- 什么是lazy router以及为什么要lazy router\n- trust proxy什么用\n- Etag weak 和strong有什么区别\n- app.all和app.use的区别及性能差异\n- 如何捕捉next(err)传递的错误\n- 路由function内部的错误是在哪个环节捕捉的\n\n说到底，是知其然，不知其所以然。而读源码，是解决这个问题的最好方法。\n但是大家普遍面临一个源码阅读时间成本高的问题。**而我想做的，是通过一种创新的方式，讲解Express工作原理和实现。**\n\n### 如何讲解\n我会从最基础的http模块开始，一步一步得实现一个Express。这样做的好处\n1. 从最简单的出发，基础小白也能看懂\n2. 循序渐进，不会迷失在复杂的代码中\n3. 非常清晰得知道每一段代码添加的缘由\n\n### 文章组织\n会分成系列文章讲解，每个文章都基于上一个文章实现一个加强版的Web框架。每个文章会给出框架源码、框架说明，框架使用样例。话不多少，开始第一个Web框架的实现吧！\n\n**文章目录**\n\n1. [渐进式Express源码学习1.万物归宗](https://github.com/sunkuo/grow-to-express/tree/master/Lesson1-%E4%B8%87%E7%89%A9%E5%BD%92%E5%AE%97)\n1. [渐进式Express源码学习2.道士下山](https://github.com/sunkuo/grow-to-express/tree/master/Lesson2-%E9%81%93%E5%A3%AB%E4%B8%8B%E5%B1%B1)\n1. [渐进式Express源码学习3.初露锋芒](https://github.com/sunkuo/grow-to-express/tree/master/Lesson3-%E5%88%9D%E9%9C%B2%E9%94%8B%E8%8A%92)\n1. [渐进式Express源码学习4.如虎添翼](https://github.com/sunkuo/grow-to-express/tree/master/Lesson4-%E5%A6%82%E8%99%8E%E6%B7%BB%E7%BF%BC)\n1. [渐进式Express源码学习5.全副武装](https://github.com/sunkuo/grow-to-express/tree/master/Lesson5-%E5%BC%80%E5%A4%A9%E8%BE%9F%E5%9C%B0)\n1. [渐进式Express源码学习6.独孤求败](https://github.com/sunkuo/grow-to-express/tree/master/Lesson6-%E7%8B%AC%E5%AD%A4%E6%B1%82%E8%B4%A5)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsunkuo%2Fgrow-to-express","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsunkuo%2Fgrow-to-express","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsunkuo%2Fgrow-to-express/lists"}