-
Notifications
You must be signed in to change notification settings - Fork 8
/
2016.html
129 lines (128 loc) · 6.84 KB
/
2016.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, minimal-ui">
<title>i5ting</title>
<link type="text/css" rel="stylesheet" href="github/assets/css/github-markdown.css">
<link type="text/css" rel="stylesheet" href="github/assets/css/pilcrow.css">
<link type="text/css" rel="stylesheet" href="github/assets/css/hljs-github.min.css"/>
</head>
<body>
<article class="markdown-body">
<h1 id="node-js-web-2016-4-">Node.js最新Web技术栈(2016年4月)</h1>
<p>上一次的发布的是<a href="https://cnodejs.org/topic/55651bf07d4c64752effb4b1">精华 Node.js最新Web技术栈(2015年5月)</a>,感谢大家喜爱,值此koa2.0发布后,决定再次升级技术栈</p>
<p>Node.js是比较简单的,只有你有前端js基础,那就按照我的办法来吧!一周足矣,虽然这版上了es语法,但依然是可以简单写,也可以难写,参见<a href="https://github.com/i5ting/nodejs-fullstack">《全栈工程师之路-Node.js》</a>,里面讲了Node.js和全栈相关的思考,整体对未来Node.js比较看好</p>
<p><img src="//dn-cnode.qbox.me/FqcnDVOK0DDnCKZ0M5i_F9gAiSNR" alt="Screen-Shot-2016-04-01-at-1.52.56-PM.jpg"></p>
<h2 id="-es-">核心变更:es语法支持</h2>
<ul>
<li>使用Node.js 4.x或5.x里的es6特性,如果想玩更高级的,可以使用<a href="babeljs.com">babel</a>编译支持es7特性</li>
<li>合理使用<a href="https://github.com/feross/standard">standard</a> 代码风格约定</li>
<li>es6语法,写的一般,比较啰嗦,凑合看吧 <a href="http://es6.ruanyifeng.com/">http://es6.ruanyifeng.com/</a> </li>
<li>需要大家重视OO(面向对象)写法的学习和使用,这是es的另一个好处,推荐蔡伟小兄弟的<a href="https://github.com/DavidCai1993/JsPatterns-ES6">《JavaScript Patterns》 examples in ECMAScript6</a></li>
</ul>
<p>相比es语法,其实我本人更喜欢typescript的,不过写Node.js还是推荐跟Node SDK玩才是。</p>
<h2 id="-">推荐技术栈</h2>
<ul>
<li>koa 1.0 && 2.0 (koa2.0刚发布不久,喜欢折腾的可以考虑)</li>
<li>mongoose(mongodb)</li>
<li>bluebird(Promise/A+实现)</li>
<li>jade(视图层模板)</li>
<li>ava(测试)</li>
<li>vscode(调试)</li>
</ul>
<p>推荐生成器(稍后会把ava和bluebird加上)</p>
<p><a href="https://github.com/17koa/koa-generator">https://github.com/17koa/koa-generator</a></p>
<p>目前国内第一本koa的书(我写的)已经和出版社签订了合同,预计几个月会与大家见面,</p>
<p>途径</p>
<ul>
<li>[Node全栈]公众号连载</li>
<li><a href="https://cnodejs.org/topic/5668e0a55af0e6ab3bf1a1d8">《一起学koa》开源书籍持续维护</a>,欢迎大家参与</li>
<li>代码问答(稍后)</li>
<li>和<a href="http://www.stuq.org/">StuQ</a>合作的Node.js Koa在线课程<a href="https://github.com/i5ting/stuq-koa">stuq-koa</a>,四月份开始报名</li>
</ul>
<h2 id="-http-ajax-req-">了解http协议,尤其是表单和ajax传值,在req里如何接收</h2>
<ul>
<li>绝对地址和相对地址</li>
<li>querystring</li>
<li>url 和 uri</li>
<li>http status code</li>
<li>http verbs</li>
<li>req取参数的3种方法</li>
<li>3种不同类型的post</li>
<li>命令行玩法</li>
<li>supertest用法</li>
<li>what is rest?</li>
</ul>
<p><a href="http://i5ting.github.io/node-http/">http://i5ting.github.io/node-http/</a></p>
<h2 id="-db-mongoose-">了解db相关操作,先以mongoose为主</h2>
<p><strong>这部分基本无调整,只是注意es写法就好了</strong></p>
<ul>
<li>crud(增删改查)</li>
<li>了解分页</li>
<li>了解关系(1对1,1对多)在mongoose里如何实现</li>
<li>了解statics方法和methods的区别</li>
<li>了解pre和post的差别</li>
<li>了解mongoose的插件机制</li>
<li>了解mvc里m的作用,以及什么样的代码该放到模型里</li>
<li>了解索引优化</li>
<li>了解mongodb的部署</li>
</ul>
<h2 id="-generator-async-promise-a-">了解Generator、Async和Promise/A+规范,合理规避回调陷阱</h2>
<p><strong>这次的变更主要是es6支持的generator和es7支持的async</strong></p>
<p>整体来说generator和async并不具备流程控制功能,所以还是需要promise支持的,以前对generator支持的promise的只有co,而基于async的基本没有,所以这里依然推荐使用bluebird,它对这些支持都非常好</p>
<ul>
<li>了解的node的异步、generator和async</li>
<li>了解异步的恶心</li>
<li>了解异步基本场景,比如waterfall这样的路程使用async如何处理</li>
<li>了解q和bluebird用法(如果有angularjs经验,推荐q,其他只推荐bluebird)</li>
<li>了解bluebird的promisifyAll用法</li>
<li>了解如何重构流程,以及代码的可读性</li>
</ul>
<h2 id="-tdd-bdd-">使用tdd/bdd测试,最小化问题</h2>
<p><strong>这次的变更主要是下一代技术栈以es开发为主,这样的话,测试用mocha,tap、tape等就没有ava帅了</strong></p>
<p>推荐<a href="https://github.com/sindresorhus/ava">ava</a>替代mocha,其他基本都一样</p>
<p><a href="https://github.com/sindresorhus/ava#why-ava">Why AVA?</a></p>
<ul>
<li>Minimal and fast</li>
<li>Simple test syntax</li>
<li>Runs tests concurrently</li>
<li>Enforces writing atomic tests</li>
<li>No implicit globals</li>
<li>Isolated environment for each test file</li>
<li>Write your tests in ES2015</li>
<li>Promise support</li>
<li>Generator function support</li>
<li>Async function support</li>
<li>Observable support</li>
<li>Enhanced assertion messages</li>
<li>Optional TAP output</li>
<li>Clean stack traces</li>
</ul>
<p>测试的好处,这里就不说了,但是有一点是要说的,node的调试比较难,往往不如写测试来的快,推荐学习一下</p>
<ul>
<li>理解最小问题思想,培养程序员该有的强大的内心</li>
<li>ava的基本用法</li>
<li>理解断言的用法(注内置断言,不需要assert/should/expect等)</li>
<li>理解测试生命周期</li>
<li>理解箭头函数、generator、promise等用法</li>
<li>理解如何模拟数据</li>
<li>理解http下的supertest测试</li>
<li>理解测试覆盖率</li>
<li>理解基于gulp自动化测试方法</li>
</ul>
<p>如果有兴趣,可以去了解更多bdd/tdd内容,甚至是cucumber.js</p>
<h2 id="-">你无论如何都要会的:调试</h2>
<p>调试有3种方法</p>
<ul>
<li>node debug(太挫了,如果不是c,了解gdb、adb之类的人不推荐用)</li>
<li>node-inspector(推荐4※)</li>
<li>tdd/bdd(推荐5※)</li>
</ul>
<p>作为基础技能掌握就好,实际开发推荐vscode</p>
<p>教程见 <a href="https://github.com/i5ting/vsc">https://github.com/i5ting/vsc</a></p>
<p>欢迎关注我的公众号【node全栈】</p>
<p><img src="//dn-cnode.qbox.me/FtALxsauUkYDGdzcuA5y6BaIdUMC" alt="node全栈.png"></p>
</article>
</body>
</html>