国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

從零組裝新工具 - Koa2

sutaking / 314人閱讀

摘要:返回后,代表操作已完成,記錄結(jié)束時(shí)間并輸出。從零組裝因?yàn)閷?duì)的學(xué)習(xí)和使用,知道了自己對(duì)于后臺(tái)框架的真實(shí)需求。所以這回決定不用之內(nèi)的工具,而是自己從零開(kāi)始,組裝一個(gè)適合自己的框架。就是去和上,尋找一個(gè)一個(gè)的包并組裝在一起了而已。

起因

作為一個(gè)前端,Node.js算是必備知識(shí)之一。同時(shí)因?yàn)樽约盒枰鲆恍┖笈_(tái)性的工作,或者完成一個(gè)小型應(yīng)用。所以學(xué)習(xí)了Node的Express框架,用于輔助和加速開(kāi)發(fā)。

不過(guò)當(dāng)初自己對(duì)Express的學(xué)習(xí)和了解,并不是很深入。要求也僅僅是停留在能發(fā)送靜態(tài)文件,構(gòu)建后臺(tái)API,與數(shù)據(jù)庫(kù)完成簡(jiǎn)單交互而已。所以當(dāng)初自己選用Express時(shí),靠的是Express 應(yīng)用生成器,相當(dāng)于Express的最佳實(shí)踐。
在使用了一段時(shí)間之后,被Express的“回調(diào)地獄”,“自定義程度不高”等問(wèn)題所困擾,于是決定更換至新的框架。

在選擇框架時(shí),遵循了自己學(xué)習(xí)新技術(shù)的原則:

要么找值得學(xué)習(xí)的,深入學(xué)習(xí)并理解。要么找適合當(dāng)前業(yè)務(wù),能快速解決問(wèn)題的。不要在具體某某某個(gè)技術(shù)上糾結(jié)太久。

這句話也是自己看余果大大的《Web全棧工程師的自我修養(yǎng)》這本書(shū)的體會(huì)。

選擇Koa

在上面原則的指導(dǎo)下,很容易的就找到了一款符合自己需求的框架:Koa。
Koa因?yàn)閼?yīng)用了ES6的生成器語(yǔ)法,所以非常優(yōu)雅的解決了Node.js的回調(diào)地獄問(wèn)題。
比如說(shuō)這樣的Ajax代碼,看起來(lái)就比回調(diào)函數(shù)的寫(xiě)法優(yōu)雅很多。

function* main() {
  var result = yield request("http://some.url");
  var resp = JSON.parse(result);
  console.log(resp.value);
}

function request(url) {
  makeAjaxCall(url, function(response){
    it.next(response);
  });
}

例子來(lái)源: Generator 函數(shù)

雖然yield的寫(xiě)法有點(diǎn)奇怪,但還是可以接受的。

選擇Koa2

同時(shí)在Koa的github首頁(yè)中,看到了Koa2。
Koa2應(yīng)用了ES7的Async/Await來(lái)替代Koa1中的生成器函數(shù)與yield。
所以上一段代碼的main函數(shù),在Koa2里長(zhǎng)這樣:

async function main() {
  var result = await request("http://some.url");
  var resp = JSON.parse(result);
  console.log(resp.value);
}

使用了Async/Await后,整段代碼是變的更加好看的。

理解Koa的中間件

在一開(kāi)始學(xué)習(xí)Koa時(shí),是不太理解Koa的中間件級(jí)聯(lián)這個(gè)概念的。
就是下圖這玩意。

這個(gè)算是Koa的核心概念了,不理解這個(gè),只能安安心心繼續(xù)用Express。

還好自己平時(shí)愛(ài)去看各種開(kāi)發(fā)大會(huì)的視頻,來(lái)提升自己的眼界。所以昨晚正好在慕課網(wǎng)看到了《阿里D2前端技術(shù)論壇——2015融合》的大會(huì)視頻,便開(kāi)心的點(diǎn)開(kāi)學(xué)習(xí)。
而第一篇《用 Node.js 構(gòu)建海量頁(yè)面渲染服務(wù)——by 不四》講的就有Koa框架,還梳理了Koa的中間件級(jí)聯(lián)這個(gè)概念。
在不四前輩介紹完Koa的中間件級(jí)聯(lián)后,我發(fā)現(xiàn)自己好像理解了。
配合著自己之前學(xué)習(xí)的ES6知識(shí),才發(fā)現(xiàn)原來(lái)是這樣。
在這兒我貼一段代碼和自己的理解,有興趣的同學(xué)可以看一看。

var koa = require("koa");
var app = koa();

// x-response-time

app.use(function *(next){
  // 首先啟動(dòng)第一個(gè)中間件,記錄下時(shí)間
  var start = new Date;
  // 進(jìn)入中間件,并等待返回。
  yield next;
  // 返回后,代表操作已完成,記錄結(jié)束時(shí)間并輸出。
  var ms = new Date - start;
  this.set("X-Response-Time", ms + "ms");
});

// response
app.use(function *(){
  // 最后一個(gè)中間件,將body寫(xiě)成"Hello World"
  this.body = "Hello World";
});

app.listen(3000);

整個(gè)的流程,會(huì)是這樣的:

.middleware1 {
  // (1) do some stuff
  .middleware2 {
    // (2) do some other stuff
    .middleware3 {
      // (3) NO next yield !
      // this.body = "hello world"
    }
    // (4) do some other stuff later
  }
  // (5) do some stuff lastest and return
}

至此,學(xué)習(xí)Koa的最后一個(gè)難關(guān),也被攻克了。

從零組裝Koa

因?yàn)閷?duì)Express的學(xué)習(xí)和使用,知道了自己對(duì)于后臺(tái)框架的真實(shí)需求。
所以這回決定不用Koa generator之內(nèi)的工具,而是自己從零開(kāi)始,組裝一個(gè)適合自己的Koa框架。
基于Koa2,使用Async/Await,符合自己需求……
想想就是很美好的事情呀。

梳理需求

首先要做的,自然就是梳理自己的需求。看看到底需要什么東西。
于是翻出自己前兩個(gè)月在使用的Express框架,確定了以下要點(diǎn)。

路由,創(chuàng)建Rest Api

發(fā)送靜態(tài)HTML文件

設(shè)置靜態(tài)文件目錄

發(fā)送和讀取JSON數(shù)據(jù)

渲染模板

使用ES6語(yǔ)法完成工作

實(shí)現(xiàn)需求

具體的實(shí)現(xiàn)部分,這兒就不再贅述了。就是去github和npm上,尋找一個(gè)一個(gè)的包并組裝在一起了而已。
整個(gè)項(xiàng)目的亮點(diǎn)就在于:完全符合個(gè)人需求,并且使用ES6來(lái)完成工作。對(duì)我個(gè)人而言,用ES6不僅看起來(lái)爽,也能提升我的工作效率。

整個(gè)項(xiàng)目已開(kāi)源于Github,日后自己取用也非常方便。有興趣的同學(xué),也可以嘗試一下。
項(xiàng)目地址:koa2-easy

總結(jié)

這周因?yàn)槲改c炎,好像也沒(méi)做啥事情……最大的事兒也只是組裝了個(gè)Koa框架。
因?yàn)轲B(yǎng)病的原因,只能每天看看開(kāi)發(fā)者大會(huì)的視頻。因?yàn)槎亲訒r(shí)不時(shí)的抽一下,真的很影響工作啊……

今天感覺(jué)好了一點(diǎn),希望病情早日康復(fù)~
就醬~

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/79282.html

相關(guān)文章

  • 從零搭建Koa2 Server

    摘要:于是翻遍與各大網(wǎng)站,都沒(méi)找到一個(gè)好用的輕一點(diǎn)的腳手架,也找不到一個(gè)清晰些的搭建介紹。現(xiàn)在把搭建過(guò)程介紹下,看能不能方便下入門(mén)的同學(xué)。創(chuàng)建一個(gè)文件夾,命名。記得先裝好以上版本一路回車(chē),根據(jù)提示輸入信息。但這只是初步的搭建了下。 前幾天想寫(xiě)個(gè)小爬蟲(chóng)程序,準(zhǔn)備后端就用koa2。于是翻遍github與各大網(wǎng)站,都沒(méi)找到一個(gè)好用的、輕一點(diǎn)的koa2腳手架,也找不到一個(gè)清晰些的搭建介紹。githu...

    JellyBool 評(píng)論0 收藏0
  • Node.js使用Koa搭建 基礎(chǔ)項(xiàng)目

    摘要:目錄一創(chuàng)建項(xiàng)目二配置路由三靜態(tài)資源四模板引擎五結(jié)語(yǔ)是由原班人馬打造的超輕量服務(wù)端框架與相比,除了自由度更高,可以自行引入中間件之外,更重要的是使用了,從而避免了回調(diào)地獄不過(guò)也是因?yàn)榇a升級(jí),所以需要以上的環(huán)境一創(chuàng)建項(xiàng)目手動(dòng)創(chuàng)建一個(gè)項(xiàng)目目錄, 目錄 一、創(chuàng)建項(xiàng)目二、配置路由三、靜態(tài)資源四、模板引擎五、結(jié)語(yǔ) Koa 是由 Express 原班人馬打造的超輕量服務(wù)端框架與 Express 相...

    BingqiChen 評(píng)論0 收藏0
  • Node.js使用Koa搭建 基礎(chǔ)項(xiàng)目

    摘要:目錄一創(chuàng)建項(xiàng)目二配置路由三靜態(tài)資源四模板引擎五結(jié)語(yǔ)是由原班人馬打造的超輕量服務(wù)端框架與相比,除了自由度更高,可以自行引入中間件之外,更重要的是使用了,從而避免了回調(diào)地獄不過(guò)也是因?yàn)榇a升級(jí),所以需要以上的環(huán)境一創(chuàng)建項(xiàng)目手動(dòng)創(chuàng)建一個(gè)項(xiàng)目目錄, 目錄 一、創(chuàng)建項(xiàng)目二、配置路由三、靜態(tài)資源四、模板引擎五、結(jié)語(yǔ) Koa 是由 Express 原班人馬打造的超輕量服務(wù)端框架與 Express 相...

    lewif 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<