Koa2框架从0开始构建预告片网站

学习总结

一、课程地址:coding.imooc.com/learn/list/…html

二、1~四、7章是 node 基础,需记于脑海。5~6章是网站项目的工程搭建和数据(使用爬虫)准备。8~9章是 node 核心教程,须要多查资料,特别是 koa-router 的高阶用法——装饰器Decorator(没看懂)。10~12章是项目前端网页的内容,加速浏览跳过。13章是发布脚本和部署,须要练习(能够去 github 上找别人的模板)。前端

14 Koa 课程总结

一、node

a8916e71ee2dfe0c8b7882df729f3684

13 服务器部署与发布

一、nginx:前端静态资源(结合 cdn)、后端接口 proxy;mysql

二、deploy.yaml:发布脚本,使用pm2来部署。(pm2除了守护node,还能部署 node???)ios

12 实现后台登陆权限与管理功能

一、koa-bodyparsernginx

二、koa-loggergit

11 实现网站前端路由与页面功能

一、axios:也可用在node 环境。github

10 集成 AntDesign 与 Parcel 打通先后端与构建

一、前端项目建立。sql

二、使用 Parcel 在开发与生产环境的构建中间件:parcel-bundlernpm

9 为网站增长路由与控制器层对外提供 API 服务

一、

二、koa-router:

const Router = require('koa-router''); const router = new Router(); router.get('/test', async (ctx, next) => { // ... ctx.body = ...; }); router.get('/test/:id', async (ctx, next) => { // ... ctx.body = ...; }); module.exports = router; 复制代码
import router from './routes';  // 引入上面本身实现的路由

app
    .use(router.routes())   // 加载路由
    .use(router.allowedMethods());  // 加载 router 默认的方法
复制代码

三、url 的规则:get、post 级联;

四、router 的使用中间件,或本身加中间件函数,参考以前学习的 next);

五、子路由:const router = new Router({ prefix: '/test'}),省略重复书写路由前缀 /test 方便管理;

六、装饰器:对路由进行拆分和集成,须要安装 babel 插件。拿到装饰器的对象及属性,对对象额外添加属性能力。

七、对类进行装饰:分配 前缀/空间。对函数进行装饰:指定子路由的实现函数。

八、装饰器的Decorator:(看得头晕)

九、路由层:对外提供接口。

十、服务层:对路由层提供服务。

十一、ramda:函数式编程,减小手写 use方式引入中间件。

8 使用 mongoose

一、config、init、connect、lister

二、mongoDB是从设计角度:document>collection>database,相似 mysql 中的 row>table>database。mongoose是从使用代码角度的:schema、model、entity。

三、

7 深度理解Node

一、从异步非阻塞的代码案例切入事件循环:EventEmitter:on、emit

二、从 libuv 源码理解 event loop 的6个阶段:为何是单线程、优先级。

三、nextTick>resolve>nextTick>timers>i/o>setImmediate>timers

四、(设计一个测试用例来验证本身对事件循环的理解)

五、

六、单线程多进程模型 事件循环及进程通讯,横向扩展。

七、cluster模式:fork、主进程master、子进程worker。疑问:子进程执行的代码和主进程的在一块儿?可否指定子进程的代码文件。

6 利用爬虫搞定网站基础数据

一、puppeteer:爬虫脚本

二、child_process fork 子进程来运行脚本

三、进程的9个问题:同步异步、异步IO、阻塞非阻塞、事件循环与事件驱动、单线程、进程、子进程、进程间通讯

四、服务端经过 request 向豆瓣API请求数据:request-promise-native,将异步request转为同步的

五、与妹子合租引发的同步异步与阻塞:

5 从0开发一个电影预告片网站

一、npm init:初始化项目。

二、结合 bootstrap,返回 html 页面。

三、使用 ejs:支持变量的 html 模板。

四、使用 Jade(Plug):

五、consolidate:模板引擎整合库。

六、koa-views:视图管理模块,自动引入指定目录下的全部模板文件,同时将 render函数挂载到 ctx 上。

七、pug的继承介绍及实例。

八、(跳过使用 pug、bootstrap 搭建静态项目首页)

九、构建工具Parcel:无配置、自带默认场景、彻底傻瓜式配置。

十、koa-static:

3-7 session-cookie-路由

3-6 纯函数-尾递归和魔法大师 koa-compose

一、纯函数的概念:

二、尾递归:

三、koa-compose:把一个个不想干的中间件串起来,上一个函数的输出结果就是下一个函数的输入参数。

3-5 Koa中间件middlewares

一、koa中,一切 use 的均是中间件!

二、中间件格式:

const mid = async (ctx, next) => {
    // 其余代码
    await next();   //串联中间件
}
复制代码

三、每次中间件执行顺序,是根据 use添加的顺序。

四、中间件A内部调用 await next()后,会跳转到下一个中间件进行执行。若是没有调用 next 则中断后续中间件执行,而后逐级按照调用 next 的顺序逆向返回以前中间件函数内部,意思是当中间件A 调用 next 后会转到中间件B 执行,这时 B 调用 next 继续执行后续中间件。若是后面没有中间件了,则返回 A 继续执行next 后的函数代码。

五、简单的说,next 是用来移交当前的控制权的,中间件数组是先进后出。

六、以 kog-logger 来进一步解释 next 的原理。

3-5 HTTP响应对象response(res)

一、 res 是挂载在 ctx 对象上的,能够经过打印 ctx 查看

3-4 HTTP请求对象request(req)

一、req 是挂载在 ctx 对象上的,能够经过打印 ctx 查看

3-3 HTTP上下文对象context(ctx)

一、

3-2 服务类Application

一、依赖包介绍

二、use:添加自定义函数到中间件列表 middleware 中;

三、listen:建立 http 对象,并开启监听;

四、callback、handleRequest:收到请求后,从 middleware 中拿出自定义函数, 并将请求对象 ctx 交给自定义函数处理,等待自定义函数处理完以后,而后交回 ctx 控制权并返回 response。

五、application 的做用:接收中间件,监听端口,接收http 请求并逐步调用中间件,最后handleResponse。

六、在网络上找更详细的内部流转流程图进行学习。

3-1 Koa核心对象

一、HTTP 接收、解析、响应:中间件、执行上下文;

二、Application:

三、Context:

四、Request:

五、Response:

六、Middlewares:

七、Session:

八、Cookie:

const Koa = require('koa');
const app = new Koa();

app.use(async (ctx, next) => {
    ctx.body = 'Hi Luke';
});

app.listen(2333);
复制代码

2-6 生产环境使用 Babel 编译执行代码

一、rimraf:删除目录。

二、babel-plugin-transform-runtime : babel 的编译运行环境。

三、babel-plugin-runtime:babel 的运行环境。

四、在 .babelrc 中添加 plugin 支持。

2-5 开发环境使用 Babel 编译 import 和 export

  • require:运行时加载。
  • import:静态加载。

一、安装 babel:yarn add -D babel-cli babel-preset-env

二、项目根目录新增文件.babelrc,增长对应配置项。

三、nodemon:监视node.js应用程序中的任何更改并自动重启服务,很是适合用在开发环境中。

四、注意 default 和别名的使用技巧。

2-4 异步函数Async Function

2-3 箭头函数

  • this:箭头函数里的 this 是指函数定义时所在做用域的 this,而不是运行时做用域的 this。

2-2 co库执行 promise 和 generator

  • co:TJ大神的做品。

2-1 生成器函数 Generator Function

  • 迭代器:关键点是next、done
  • 生成器:简化迭代器的建立过程,关键点是*和 yield。yield 是用来等待函数执行完成

1-3 推荐使用Promise

  • callback:在Node中异步回调有一个约定:Error first,也就是说回调函数中的第一个参数必定要是Error对象,其他参数才是正确时的数据。因此先判断 error,若是没有出错再进行后续操做。
  • promise:使用return new Promise 来取代 callback。
  • promiseifyutil.promisify 的那些事儿

1-2 安装 Node 版本

  • 多用 LTS 版本,本地和服务器尽可能保持一致。
  • 使用 nvm 来管理 node 版本,可在本地切换最新版本学习新特性。
  • node 版本支持 ES 特性列表
相关文章
相关标签/搜索