{"id":20916804,"url":"https://github.com/suanmei/full-stack","last_synced_at":"2026-04-13T19:31:34.938Z","repository":{"id":113549495,"uuid":"153252375","full_name":"suanmei/full-stack","owner":"suanmei","description":"🏅全栈入门日记  https://suanmei.github.io/full-stack/","archived":false,"fork":false,"pushed_at":"2018-10-18T17:12:57.000Z","size":230,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-12-26T07:55:52.752Z","etag":null,"topics":["full-stack","fullstack","koa2","mobx","mongodb","mongoose","nextjs","react","react-router","react-router-v4","ssr","vuepress"],"latest_commit_sha":null,"homepage":"","language":"Shell","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/suanmei.png","metadata":{"files":{"readme":"docs/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}},"created_at":"2018-10-16T08:42:55.000Z","updated_at":"2020-12-10T09:08:04.000Z","dependencies_parsed_at":"2023-06-27T10:13:25.616Z","dependency_job_id":null,"html_url":"https://github.com/suanmei/full-stack","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/suanmei/full-stack","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/suanmei%2Ffull-stack","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/suanmei%2Ffull-stack/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/suanmei%2Ffull-stack/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/suanmei%2Ffull-stack/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/suanmei","download_url":"https://codeload.github.com/suanmei/full-stack/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/suanmei%2Ffull-stack/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31768635,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-13T15:25:13.801Z","status":"ssl_error","status_checked_at":"2026-04-13T15:25:09.162Z","response_time":93,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["full-stack","fullstack","koa2","mobx","mongodb","mongoose","nextjs","react","react-router","react-router-v4","ssr","vuepress"],"created_at":"2024-11-18T16:26:10.622Z","updated_at":"2026-04-13T19:31:34.907Z","avatar_url":"https://github.com/suanmei.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 介绍\n\n## 为什么叫 '日记'\n\n当我开始学习 node ，想要藉此实现一个全栈项目的时候，我希望从网络上搜集一些系统的内容帮助我达成我的目标，但很不幸，这些内容基本呈现‘两极化’：\n\n1. 简单的入门文章。确实通俗易懂，能够把架子搭出来，输出 `Hello world`，但仅限于此\n2. github 上能找到很多功能丰富的项目。但除了对项目的几百字简单介绍，其他所有的功能实现都需要你自己去慢慢看\n\n当时就有一个想法，要是有人能详细的介绍他实现项目的细节，快速引导我入门，并且告诉我实现的时候有哪些哪些坑，该怎么解决，那真是太美妙了，毕竟这些坑踩起来并不是太有意义。\n\n所以就有了这个系列！\n\n实现每个小功能的时候，我都会将实现步骤以及相关知识，记录到笔记中，只有这样，才能最真实的记录新手在完成项目时会遇到哪些坎。如果等我实现完了，再来写这些文章，写文章的角度就不一样了，也会忘了哪些是新手迫切想知道而我们认为无足轻重的知识点。\n\n这就是 **日记** 的由来。\n\n当然，在完成了项目后，我对整个实现过程做了一个回顾，并且将之前的笔记做了梳理，毕竟笔记上记录得相对零碎，也是希望能够更好地分享给大家。\n\n## 什么样的一个项目\n\n我实现的是一个博客系统，由三个项目构成：\n\n* 博客前端\n\n  博客C端，也就是用户平时访问的博客客户端，是一个采用 next.js\\(React SSR 框架\\) 实现的服务端渲染的项目。\n\n  技术栈: next.js + mobx + Typescript + koa2\n\n* 博客管理后台\n\n  用于日常管理博客，如发布文章等，是一个使用 React 手工实现服务端渲染的项目。\n\n  技术栈: React + React Router + mobx + Typescript + koa2\n\n* 博客服务端\n\n  博客得有后端服务吧，我这里把后端服务拆分出来，独立成一个项目，是为了实现和前端项目的解耦。本项目实现了一套 RESTful 风格的 API。\n\n  技术栈: Koa2 + mongodb + Typescript\n\n## 能学会什么\n\n大家可能也发现了 Typescript 在三个项目中都有使用，因为 Typescript 确实弥补了 Javascript 先天的一些不足，这也是它越来越火的原因。如果你跟着这个系列走到最后，你能够学习到 node 的基础知识，掌握 node 框架 Koa2 和 数据库 mongodb 的日常开发能力，你能学习到 React 做服务端渲染的原理以及实现它的两种方试，状态管理后起之秀 mobx 的使用，当然，还有 Typescript 的基础知识和实践。\n\n当然，诚挚地希望，看完这个系列的文章，大家能够对全栈知识有一个系统的认知。\n\n## 适合什么样的人\n\n1. 有 js 基础并且熟悉常用的 es6 知识的同学，当然，你还需要知道 React 的一些基础知识\n2. 对 node 零基础或者了解得比较少的同学\n3. 希望学习 Typescript 的同学\n\n## 寄语\n\n文章和项目肯定会有不足，如果大家看到了，希望及时指正（ github 中提 issue 或者 PR ）。\n\n文章 github: [https://github.com/suanmei/full-stack](https://github.com/suanmei/full-stack)  \n博客 github: [https://github.com/suanmei/blog](https://github.com/suanmei/blog)  \n博客管理系统 github: [https://github.com/suanmei/blog-admin](https://github.com/suanmei/blog-admin)  \n博客服务端 github: [https://github.com/suanmei/blog-apiv](https://github.com/suanmei/blog-apiv)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsuanmei%2Ffull-stack","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsuanmei%2Ffull-stack","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsuanmei%2Ffull-stack/lists"}