一、课程地址:coding.imooc.com/learn/list/…。html
二、1~四、7章是 node 基础,需记于脑海。5~6章是网站项目的工程搭建和数据(使用爬虫)准备。8~9章是 node 核心教程,须要多查资料,特别是 koa-router 的高阶用法——装饰器Decorator(没看懂)。10~12章是项目前端网页的内容,加速浏览跳过。13章是发布脚本和部署,须要练习(能够去 github 上找别人的模板)。前端
一、node
一、nginx:前端静态资源(结合 cdn)、后端接口 proxy;mysql
二、deploy.yaml:发布脚本,使用pm2来部署。(pm2除了守护node,还能部署 node???)ios
一、koa-bodyparsernginx
二、koa-loggergit
一、axios:也可用在node 环境。github
一、前端项目建立。sql
二、使用 Parcel 在开发与生产环境的构建中间件:parcel-bundlernpm
一、
二、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方式引入中间件。
一、config、init、connect、lister
二、mongoDB是从设计角度:document>collection>database,相似 mysql 中的 row>table>database。mongoose是从使用代码角度的:schema、model、entity。
三、
一、从异步非阻塞的代码案例切入事件循环:EventEmitter:on、emit
二、从 libuv 源码理解 event loop 的6个阶段:为何是单线程、优先级。
三、nextTick>resolve>nextTick>timers>i/o>setImmediate>timers
四、(设计一个测试用例来验证本身对事件循环的理解)
五、
六、单线程多进程模型 事件循环及进程通讯,横向扩展。
七、cluster模式:fork、主进程master、子进程worker。疑问:子进程执行的代码和主进程的在一块儿?可否指定子进程的代码文件。
一、puppeteer:爬虫脚本
二、child_process fork 子进程来运行脚本
三、进程的9个问题:同步异步、异步IO、阻塞非阻塞、事件循环与事件驱动、单线程、进程、子进程、进程间通讯
四、服务端经过 request 向豆瓣API请求数据:request-promise-native,将异步request转为同步的
五、与妹子合租引发的同步异步与阻塞:
一、npm init:初始化项目。
二、结合 bootstrap,返回 html 页面。
三、使用 ejs:支持变量的 html 模板。
四、使用 Jade(Plug):
五、consolidate:模板引擎整合库。
六、koa-views:视图管理模块,自动引入指定目录下的全部模板文件,同时将 render函数挂载到 ctx 上。
七、pug的继承介绍及实例。
八、(跳过使用 pug、bootstrap 搭建静态项目首页)
九、构建工具Parcel:无配置、自带默认场景、彻底傻瓜式配置。
十、koa-static:
一、纯函数的概念:
二、尾递归:
三、koa-compose:把一个个不想干的中间件串起来,上一个函数的输出结果就是下一个函数的输入参数。
一、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 的原理。
一、 res 是挂载在 ctx 对象上的,能够经过打印 ctx 查看
一、req 是挂载在 ctx 对象上的,能够经过打印 ctx 查看
一、
一、依赖包介绍
二、use:添加自定义函数到中间件列表 middleware 中;
三、listen:建立 http 对象,并开启监听;
四、callback、handleRequest:收到请求后,从 middleware 中拿出自定义函数, 并将请求对象 ctx 交给自定义函数处理,等待自定义函数处理完以后,而后交回 ctx 控制权并返回 response。
五、application 的做用:接收中间件,监听端口,接收http 请求并逐步调用中间件,最后handleResponse。
六、在网络上找更详细的内部流转流程图进行学习。
一、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);
复制代码
一、rimraf:删除目录。
二、babel-plugin-transform-runtime : babel 的编译运行环境。
三、babel-plugin-runtime:babel 的运行环境。
四、在 .babelrc 中添加 plugin 支持。
一、安装 babel:yarn add -D babel-cli babel-preset-env
。
二、项目根目录新增文件.babelrc
,增长对应配置项。
三、nodemon:监视node.js应用程序中的任何更改并自动重启服务,很是适合用在开发环境中。
四、注意 default 和别名的使用技巧。
return new Promise
来取代 callback。