{"id":18057049,"url":"https://github.com/slashhuang/pure-node-notebook-step","last_synced_at":"2025-08-28T23:49:16.842Z","repository":{"id":92749779,"uuid":"85398487","full_name":"slashhuang/pure-node-notebook-step","owner":"slashhuang","description":"A step by step code repo for pure-node-notebook","archived":false,"fork":false,"pushed_at":"2017-05-13T03:23:55.000Z","size":5618,"stargazers_count":20,"open_issues_count":0,"forks_count":6,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-04-11T04:37:32.803Z","etag":null,"topics":["nodejs","tutorial"],"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/slashhuang.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-03-18T12:09:44.000Z","updated_at":"2021-11-30T14:52:46.000Z","dependencies_parsed_at":null,"dependency_job_id":"9617740c-9db0-44c1-a82d-78998e63648e","html_url":"https://github.com/slashhuang/pure-node-notebook-step","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/slashhuang/pure-node-notebook-step","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slashhuang%2Fpure-node-notebook-step","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slashhuang%2Fpure-node-notebook-step/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slashhuang%2Fpure-node-notebook-step/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slashhuang%2Fpure-node-notebook-step/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/slashhuang","download_url":"https://codeload.github.com/slashhuang/pure-node-notebook-step/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slashhuang%2Fpure-node-notebook-step/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272582509,"owners_count":24959420,"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-08-28T02:00:10.768Z","response_time":74,"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":["nodejs","tutorial"],"created_at":"2024-10-31T02:06:25.912Z","updated_at":"2025-08-28T23:49:16.834Z","avatar_url":"https://github.com/slashhuang.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# pure-node-notebook-step\n\n## 前言\n\n本项目是从零到一打造个人博客系统的项目，不依赖任何第三方框架，手写Node.js处理中间件。\n\n博客的前端项目可以参考独立的[pure-node-notebook-fe](https://github.com/slashhuang/pure-node-notebook-fe)\n\n\n您可以通过`git checkout 分支`来学习不同阶段的node代码。\n\n**项目架构**\n\n```bash\n\n\t|- app  node中间件及服务\n\t|\t|\n\t|\t|- 技术选型   promise + ejs(模板引擎)\n\t|\n\t|\n\t|- public  前端\n\t|\t|\n\t|\t|- 技术选型   ant-design + react项目\n\t|\n\t|\n\t|- db.sh   运行mongodb\n\t|\t|\n\t|\t|- 技术选型   mongoose\n\t|\n\t|- index.js  程序启动入口\n\n```\n\n\n**运行项目**\n\n```bash\n\n\tgit clone git@github.com:slashhuang/pure-node-notebook-step.git\n\n\t# start mongodb\n\tsh ./db.sh\n\n\t# start node.js code\n\tnpm install --verbose\n\tnpm start\n\n\t# 初始化前端项目\n\tgit clone https://github.com/slashhuang/pure-node-notebook-fe.git public\n\n\t#  start front-end code\n\n\tcd public\n\t\n\t# 开发环境 npm start\n\t# 生产环境 npm run build\n\n```\n\n## 第一课 项目初始化http服务\n\nnpm、package.json、node_modules及项目架构初始化\n\n```bash\n\tgit clone git@github.com:slashhuang/pure-node-notebook-step.git\n\tgit checkout lesson1\n\tnpm install\n\tnpm start\n```\n\n## 第二课 创建静态资源服务器\n\nhttp协议、fs、path模块及创建项目静态服务器\n\n```bash\n\tgit checkout lesson2\n\tnpm install\n\tnpm start\n```\n\n## 第三课 引入对接前端ajax的api服务体系\n\n引入Promise/url架构项目\n\n引入对接前端ajax的api服务体系\n\n```bash\n\tgit checkout lesson3\n\tnpm install\n\tnpm start\n```\n\n## 第四课 引入stream和Promise\n\n引入Promise来连接static-server api-server\n\n引入Promise/url/querystring架构项目\n\n抽象request数据的context模型中间件url-parser\n\n```bash\n\tgit checkout lesson4\n\tnpm install\n\tnpm start\n```\n\n## 第五课 设计框架API及Promise中间件逻辑\n\n1. 设计expres和koa的api风格,模拟`use` `callback`方法。\n\n2. 将request和response抽象为一个引用对象。\n\n3. Buffer讲解\n\n```bash\n\tgit checkout lesson5\n\tnpm install\n\tnpm start\n```\n\n## 第六课 引入EJS模板引擎\n\n1. 引入EJS中间件处理服务端渲染\n\n2. 引入webpack2构建前端代码\n\n```bash\n\tgit checkout lesson6\n\tnpm install\n\tnpm start\n```\n\n## 第七课  实现Node动态路由/重定向/页面模块划分\n\n1. 实现Node动态路由/重定向/页面模块划分\n\n2. 页面框架\n\n- header:   头像 + 导航：首页 + 关于 + 博客列表 + 写博客(权限控制) +  搜索\n- footer:   友情链接 + github + 知乎 + 掘金 + copyright + 回到顶部\n- 内容区 :见如下内容排布\n\n3. 内容排布\n\n|-- /: 首页   博客列表 + 个人展示\n\n|-- /list: 博客列表  博客分类  + 博客列表\n\n|-- /write: 写博客    分两屏  markdown编辑器 +  预览区\n\n|-- /about/ 关于      自由发挥\n\n|-- url非法: 重定向到首页\n\n\n```bash\n\tgit checkout lesson7\n\tnpm install\n\tnpm start\n```\n\n## 第八课 采用cookie实现用户授信\n\n1. 学习cookie来实现简化版的登录登出\n\n2. 介绍responsive css基础\n\n```bash\n\tgit checkout lesson8\n\tnpm install\n\tnpm start\n```\n\n\n## 第九课 引入mongodb准备数据库存储\n\n1. 学习关系型和非关系型数据库\n\n2. 学习mongodb基本知识\n\n[参考mongo-panda项目](https://github.com/slashhuang/mongo-panda)\n\n```bash\n\tgit checkout lesson9\n\tnpm install\n\tnpm start\n```\n\n## 第十课 引入mongoose和submodule\n\n1. 引入submodule管理前端静态资源\n\n2. 编写router处理前端ajax请求\n\n3. 编写数据库存储逻辑\n\n博客的前端项目在[pure-node-notebook-fe](https://github.com/slashhuang/pure-node-notebook-fe)\n\n```bash\n\tgit checkout lesson10\n\tnpm install\n\tnpm start\n```\n\n## 第十一课 采用mongoose来处理管理后台博客CRUD功能\n\n1. 增加博客主功能\n\n```bash\n\n\t# 博客列表及详情\n\n\t1. '/blogDetail.action' =get=\u003e 获取博客详情\n\n\t2. '/blogList.action' =get=\u003e 获取博客列表\n\n\t3. '/blog.action' =post=\u003e  增加或者更新博客\n\n\t4. '/deleteBlog.action' =get=\u003e 删除博客\n\n\t# 博客分类相关\n\n\t5. '/categoryList.action'=get=\u003e 获取博客分类\n\n\t6. '/category.action' =post=\u003e 增加或者更新博客分类\n```\n\n2. 编写数据库存储逻辑\n\n\n博客的前端项目在[pure-node-notebook-fe](https://github.com/slashhuang/pure-node-notebook-fe)\n\n```bash\n\tgit checkout lesson11\n\tnpm install\n\tnpm start\n```\n\n## 第十二课  ssh部署阿里云ECS服务器\n\n```bash\n\tgit checkout lesson12\n\tnpm install\n\tnpm start\n```\n\n## 参考资料\n[mongo shell](https://docs.mongodb.com/manual/reference/mongo-shell/)\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fslashhuang%2Fpure-node-notebook-step","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fslashhuang%2Fpure-node-notebook-step","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fslashhuang%2Fpure-node-notebook-step/lists"}