Skip to content

Commit 2490094

Browse files
author
狼叔
committed
Update 2018-03-23T06:16:59.869Z
1 parent aaa0e28 commit 2490094

File tree

3 files changed

+36
-22
lines changed

3 files changed

+36
-22
lines changed

README.html

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@
6666
<div id='readme' style='width:70%;margin-left:20%;'>
6767
<article class='markdown-body'>
6868
<h1 id="-live-node-js">【知乎Live】狼叔:如何正确的学习Node.js</h1>
69+
<p><img src="media/preview.png" alt=""></p>
70+
<p>预览地址 <a href="https://i5ting.github.io/How-to-learn-node-correctly/">https://i5ting.github.io/How-to-learn-node-correctly/</a></p>
6971
<p>Live 简介</p>
7072
<p>你好,我是 i5ting ,江湖人称「狼叔」,目前是阿里巴巴技术专家,斯达克学院( StuQ )明星讲师, Node.js 技术布道者。曾就职于去哪儿、新浪、网秦,做过前端、后端、数据分析,是一名全栈技术的实践者。</p>
7173
<p>现在,越来越多的科技公司和开发者开始使用 Node.js 开发各种应用。Node.js除了能够辅助大前端开发外,还可以编写Web应用,封装Api,组装RPC服务等,甚至是开发VSCode编辑器一样的PC客户端。和其它技术相比, Node.js 简单易学,性能好、部署容易,能够轻松处理高并发场景下的大量服务器请求。Node.js 周边的生态也非常强大,NPM(Node包管理)上有超过60万个模块,日下超过载量3亿次。但编写 Node.js 代码对新人和其它语言背景的开发者来说,不是一件容易的事,在入门之前需要弄懂不少复杂的概念。</p>
@@ -248,7 +250,7 @@ <h4 id="npm">npm</h4>
248250
<td>npm i -s xxx</td>
249251
</tr>
250252
<tr>
251-
<td>npm install --save-de xxx</td>
253+
<td>npm install --save-dev xxx</td>
252254
<td>安装xxx模块,并且记录到package.json里,字段对应的dev-dependency,是开发环境必须依赖的模块,比如测试类的(mocha、chai、sinon、zombie、supertest等)都在</td>
253255
<td>npm i -D xxx</td>
254256
</tr>
@@ -592,7 +594,7 @@ <h4 id="3-promise">3)中流砥柱:Promise</h4>
592594
<h4 id="4-async-await">4)终极解决方案:Async/Await</h4>
593595
<p>Async/Await是异步操作的终极解决方案,Koa 2在node 7.6发布之后,立马发布了正式版本,并且推荐使用async函数来编写Koa中间件。</p>
594596
<p>这里给出一段Koa 2应用里的一段代码 </p>
595-
<pre><code>exports.list = async (ctx, next) =&gt; {
597+
<pre><code class="lang-js">exports.list = async (ctx, next) =&gt; {
596598
try {
597599
let students = await Student.getAllAsync();
598600

@@ -603,15 +605,16 @@ <h4 id="4-async-await">4)终极解决方案:Async/Await</h4>
603605
return ctx.api_error(err);
604606
}
605607
};
606-
</code></pre><p>它做了3件事儿</p>
608+
</code></pre>
609+
<p>它做了3件事儿</p>
607610
<ul>
608611
<li>通过await Student.getAllAsync();来获取所有的students信息。</li>
609612
<li>通过await ctx.render渲染页面</li>
610613
<li>由于是同步代码,使用try/catch做的异常处理</li>
611614
</ul>
612615
<p>是不是非常简单,现在Eggjs里也都是这样同步的代码。</p>
613616
<p>4.1 正常写法</p>
614-
<pre><code>const pkgConf = require(&#39;pkg-conf&#39;);
617+
<pre><code class="lang-js">const pkgConf = require(&#39;pkg-conf&#39;);
615618

616619
async function main(){
617620
const config = await pkgConf(&#39;unicorn&#39;);
@@ -621,17 +624,19 @@ <h4 id="4-async-await">4)终极解决方案:Async/Await</h4>
621624
}
622625

623626
main();
624-
</code></pre><p>变态写法</p>
625-
<pre><code>const pkgConf = require(&#39;pkg-conf&#39;);
627+
</code></pre>
628+
<p>变态写法</p>
629+
<pre><code class="lang-js">const pkgConf = require(&#39;pkg-conf&#39;);
626630

627631
(async () =&gt; {
628632
const config = await pkgConf(&#39;unicorn&#39;);
629633

630634
console.log(config.rainbow);
631635
//=&gt; true
632636
})();
633-
</code></pre><p>4.2 await + Promise</p>
634-
<pre><code>const Promise = require(&#39;bluebird&#39;);
637+
</code></pre>
638+
<p>4.2 await + Promise</p>
639+
<pre><code class="lang-js">const Promise = require(&#39;bluebird&#39;);
635640
const fs = Promise.promisifyAll(require(&quot;fs&quot;));
636641

637642
async function main(){
@@ -640,8 +645,9 @@ <h4 id="4-async-await">4)终极解决方案:Async/Await</h4>
640645
}
641646

642647
main();
643-
</code></pre><p>4.3 await + co + generator</p>
644-
<pre><code>const co = require(&#39;co&#39;);
648+
</code></pre>
649+
<p>4.3 await + co + generator</p>
650+
<pre><code class="lang-js">const co = require(&#39;co&#39;);
645651
const Promise = require(&#39;bluebird&#39;);
646652
const fs = Promise.promisifyAll(require(&quot;fs&quot;));
647653

@@ -655,7 +661,8 @@ <h4 id="4-async-await">4)终极解决方案:Async/Await</h4>
655661
}
656662

657663
main();
658-
</code></pre><p>要点</p>
664+
</code></pre>
665+
<p>要点</p>
659666
<ul>
660667
<li>co的返回值是promise,所以await可以直接接co。</li>
661668
<li>co的参数是genrator</li>

index.html

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@
6666
<div id='readme' style='width:70%;margin-left:20%;'>
6767
<article class='markdown-body'>
6868
<h1 id="-live-node-js">【知乎Live】狼叔:如何正确的学习Node.js</h1>
69+
<p><img src="media/preview.png" alt=""></p>
70+
<p>预览地址 <a href="https://i5ting.github.io/How-to-learn-node-correctly/">https://i5ting.github.io/How-to-learn-node-correctly/</a></p>
6971
<p>Live 简介</p>
7072
<p>你好,我是 i5ting ,江湖人称「狼叔」,目前是阿里巴巴技术专家,斯达克学院( StuQ )明星讲师, Node.js 技术布道者。曾就职于去哪儿、新浪、网秦,做过前端、后端、数据分析,是一名全栈技术的实践者。</p>
7173
<p>现在,越来越多的科技公司和开发者开始使用 Node.js 开发各种应用。Node.js除了能够辅助大前端开发外,还可以编写Web应用,封装Api,组装RPC服务等,甚至是开发VSCode编辑器一样的PC客户端。和其它技术相比, Node.js 简单易学,性能好、部署容易,能够轻松处理高并发场景下的大量服务器请求。Node.js 周边的生态也非常强大,NPM(Node包管理)上有超过60万个模块,日下超过载量3亿次。但编写 Node.js 代码对新人和其它语言背景的开发者来说,不是一件容易的事,在入门之前需要弄懂不少复杂的概念。</p>
@@ -248,7 +250,7 @@ <h4 id="npm">npm</h4>
248250
<td>npm i -s xxx</td>
249251
</tr>
250252
<tr>
251-
<td>npm install --save-de xxx</td>
253+
<td>npm install --save-dev xxx</td>
252254
<td>安装xxx模块,并且记录到package.json里,字段对应的dev-dependency,是开发环境必须依赖的模块,比如测试类的(mocha、chai、sinon、zombie、supertest等)都在</td>
253255
<td>npm i -D xxx</td>
254256
</tr>
@@ -592,7 +594,7 @@ <h4 id="3-promise">3)中流砥柱:Promise</h4>
592594
<h4 id="4-async-await">4)终极解决方案:Async/Await</h4>
593595
<p>Async/Await是异步操作的终极解决方案,Koa 2在node 7.6发布之后,立马发布了正式版本,并且推荐使用async函数来编写Koa中间件。</p>
594596
<p>这里给出一段Koa 2应用里的一段代码 </p>
595-
<pre><code>exports.list = async (ctx, next) =&gt; {
597+
<pre><code class="lang-js">exports.list = async (ctx, next) =&gt; {
596598
try {
597599
let students = await Student.getAllAsync();
598600

@@ -603,15 +605,16 @@ <h4 id="4-async-await">4)终极解决方案:Async/Await</h4>
603605
return ctx.api_error(err);
604606
}
605607
};
606-
</code></pre><p>它做了3件事儿</p>
608+
</code></pre>
609+
<p>它做了3件事儿</p>
607610
<ul>
608611
<li>通过await Student.getAllAsync();来获取所有的students信息。</li>
609612
<li>通过await ctx.render渲染页面</li>
610613
<li>由于是同步代码,使用try/catch做的异常处理</li>
611614
</ul>
612615
<p>是不是非常简单,现在Eggjs里也都是这样同步的代码。</p>
613616
<p>4.1 正常写法</p>
614-
<pre><code>const pkgConf = require(&#39;pkg-conf&#39;);
617+
<pre><code class="lang-js">const pkgConf = require(&#39;pkg-conf&#39;);
615618

616619
async function main(){
617620
const config = await pkgConf(&#39;unicorn&#39;);
@@ -621,17 +624,19 @@ <h4 id="4-async-await">4)终极解决方案:Async/Await</h4>
621624
}
622625

623626
main();
624-
</code></pre><p>变态写法</p>
625-
<pre><code>const pkgConf = require(&#39;pkg-conf&#39;);
627+
</code></pre>
628+
<p>变态写法</p>
629+
<pre><code class="lang-js">const pkgConf = require(&#39;pkg-conf&#39;);
626630

627631
(async () =&gt; {
628632
const config = await pkgConf(&#39;unicorn&#39;);
629633

630634
console.log(config.rainbow);
631635
//=&gt; true
632636
})();
633-
</code></pre><p>4.2 await + Promise</p>
634-
<pre><code>const Promise = require(&#39;bluebird&#39;);
637+
</code></pre>
638+
<p>4.2 await + Promise</p>
639+
<pre><code class="lang-js">const Promise = require(&#39;bluebird&#39;);
635640
const fs = Promise.promisifyAll(require(&quot;fs&quot;));
636641

637642
async function main(){
@@ -640,8 +645,9 @@ <h4 id="4-async-await">4)终极解决方案:Async/Await</h4>
640645
}
641646

642647
main();
643-
</code></pre><p>4.3 await + co + generator</p>
644-
<pre><code>const co = require(&#39;co&#39;);
648+
</code></pre>
649+
<p>4.3 await + co + generator</p>
650+
<pre><code class="lang-js">const co = require(&#39;co&#39;);
645651
const Promise = require(&#39;bluebird&#39;);
646652
const fs = Promise.promisifyAll(require(&quot;fs&quot;));
647653

@@ -655,7 +661,8 @@ <h4 id="4-async-await">4)终极解决方案:Async/Await</h4>
655661
}
656662

657663
main();
658-
</code></pre><p>要点</p>
664+
</code></pre>
665+
<p>要点</p>
659666
<ul>
660667
<li>co的返回值是promise,所以await可以直接接co。</li>
661668
<li>co的参数是genrator</li>

media/preview.png

478 KB
Loading

0 commit comments

Comments
 (0)