摘要:返回后,代表操作已完成,記錄結(jié)束時(shí)間并輸出。從零組裝因?yàn)閷Φ膶W(xué)習(xí)和使用,知道了自己對于后臺框架的真實(shí)需求。所以這回決定不用之內(nèi)的工具,而是自己從零開始,組裝一個(gè)適合自己的框架。就是去和上,尋找一個(gè)一個(gè)的包并組裝在一起了而已。
起因
作為一個(gè)前端,Node.js算是必備知識之一。同時(shí)因?yàn)樽约盒枰鲆恍┖笈_性的工作,或者完成一個(gè)小型應(yīng)用。所以學(xué)習(xí)了Node的Express框架,用于輔助和加速開發(fā)。
不過當(dāng)初自己對Express的學(xué)習(xí)和了解,并不是很深入。要求也僅僅是停留在能發(fā)送靜態(tài)文件,構(gòu)建后臺API,與數(shù)據(jù)庫完成簡單交互而已。所以當(dāng)初自己選用Express時(shí),靠的是Express 應(yīng)用生成器,相當(dāng)于Express的最佳實(shí)踐。
在使用了一段時(shí)間之后,被Express的“回調(diào)地獄”,“自定義程度不高”等問題所困擾,于是決定更換至新的框架。
在選擇框架時(shí),遵循了自己學(xué)習(xí)新技術(shù)的原則:
要么找值得學(xué)習(xí)的,深入學(xué)習(xí)并理解。要么找適合當(dāng)前業(yè)務(wù),能快速解決問題的。不要在具體某某某個(gè)技術(shù)上糾結(jié)太久。
這句話也是自己看余果大大的《Web全棧工程師的自我修養(yǎng)》這本書的體會。
選擇Koa在上面原則的指導(dǎo)下,很容易的就找到了一款符合自己需求的框架:Koa。
Koa因?yàn)閼?yīng)用了ES6的生成器語法,所以非常優(yōu)雅的解決了Node.js的回調(diào)地獄問題。
比如說這樣的Ajax代碼,看起來就比回調(diào)函數(shù)的寫法優(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); }); }
例子來源: Generator 函數(shù)
雖然yield的寫法有點(diǎn)奇怪,但還是可以接受的。
選擇Koa2同時(shí)在Koa的github首頁中,看到了Koa2。
Koa2應(yīng)用了ES7的Async/Await來替代Koa1中的生成器函數(shù)與yield。
所以上一段代碼的main函數(shù),在Koa2里長這樣:
async function main() { var result = await request("http://some.url"); var resp = JSON.parse(result); console.log(resp.value); }
使用了Async/Await后,整段代碼是變的更加好看的。
理解Koa的中間件在一開始學(xué)習(xí)Koa時(shí),是不太理解Koa的中間件級聯(lián)這個(gè)概念的。
就是下圖這玩意。
這個(gè)算是Koa的核心概念了,不理解這個(gè),只能安安心心繼續(xù)用Express。
還好自己平時(shí)愛去看各種開發(fā)大會的視頻,來提升自己的眼界。所以昨晚正好在慕課網(wǎng)看到了《阿里D2前端技術(shù)論壇——2015融合》的大會視頻,便開心的點(diǎn)開學(xué)習(xí)。
而第一篇《用 Node.js 構(gòu)建海量頁面渲染服務(wù)——by 不四》講的就有Koa框架,還梳理了Koa的中間件級聯(lián)這個(gè)概念。
在不四前輩介紹完Koa的中間件級聯(lián)后,我發(fā)現(xiàn)自己好像理解了。
配合著自己之前學(xué)習(xí)的ES6知識,才發(fā)現(xiàn)原來是這樣。
在這兒我貼一段代碼和自己的理解,有興趣的同學(xué)可以看一看。
var koa = require("koa"); var app = koa(); // x-response-time app.use(function *(next){ // 首先啟動第一個(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寫成"Hello World" this.body = "Hello World"; }); app.listen(3000);
整個(gè)的流程,會是這樣的:
.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)閷xpress的學(xué)習(xí)和使用,知道了自己對于后臺框架的真實(shí)需求。
所以這回決定不用Koa generator之內(nè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語法完成工作
實(shí)現(xiàn)需求具體的實(shí)現(xiàn)部分,這兒就不再贅述了。就是去github和npm上,尋找一個(gè)一個(gè)的包并組裝在一起了而已。
整個(gè)項(xiàng)目的亮點(diǎn)就在于:完全符合個(gè)人需求,并且使用ES6來完成工作。對我個(gè)人而言,用ES6不僅看起來爽,也能提升我的工作效率。
整個(gè)項(xiàng)目已開源于Github,日后自己取用也非常方便。有興趣的同學(xué),也可以嘗試一下。
項(xiàng)目地址:koa2-easy
這周因?yàn)槲改c炎,好像也沒做啥事情……最大的事兒也只是組裝了個(gè)Koa框架。
因?yàn)轲B(yǎng)病的原因,只能每天看看開發(fā)者大會的視頻。因?yàn)槎亲訒r(shí)不時(shí)的抽一下,真的很影響工作啊……
今天感覺好了一點(diǎn),希望病情早日康復(fù)~
就醬~
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/79282.html
摘要:于是翻遍與各大網(wǎng)站,都沒找到一個(gè)好用的輕一點(diǎn)的腳手架,也找不到一個(gè)清晰些的搭建介紹。現(xiàn)在把搭建過程介紹下,看能不能方便下入門的同學(xué)。創(chuàng)建一個(gè)文件夾,命名。記得先裝好以上版本一路回車,根據(jù)提示輸入信息。但這只是初步的搭建了下。 前幾天想寫個(gè)小爬蟲程序,準(zhǔn)備后端就用koa2。于是翻遍github與各大網(wǎng)站,都沒找到一個(gè)好用的、輕一點(diǎn)的koa2腳手架,也找不到一個(gè)清晰些的搭建介紹。githu...
摘要:目錄一創(chuàng)建項(xiàng)目二配置路由三靜態(tài)資源四模板引擎五結(jié)語是由原班人馬打造的超輕量服務(wù)端框架與相比,除了自由度更高,可以自行引入中間件之外,更重要的是使用了,從而避免了回調(diào)地獄不過也是因?yàn)榇a升級,所以需要以上的環(huán)境一創(chuàng)建項(xiàng)目手動創(chuàng)建一個(gè)項(xiàng)目目錄, 目錄 一、創(chuàng)建項(xiàng)目二、配置路由三、靜態(tài)資源四、模板引擎五、結(jié)語 Koa 是由 Express 原班人馬打造的超輕量服務(wù)端框架與 Express 相...
摘要:目錄一創(chuàng)建項(xiàng)目二配置路由三靜態(tài)資源四模板引擎五結(jié)語是由原班人馬打造的超輕量服務(wù)端框架與相比,除了自由度更高,可以自行引入中間件之外,更重要的是使用了,從而避免了回調(diào)地獄不過也是因?yàn)榇a升級,所以需要以上的環(huán)境一創(chuàng)建項(xiàng)目手動創(chuàng)建一個(gè)項(xiàng)目目錄, 目錄 一、創(chuàng)建項(xiàng)目二、配置路由三、靜態(tài)資源四、模板引擎五、結(jié)語 Koa 是由 Express 原班人馬打造的超輕量服務(wù)端框架與 Express 相...
閱讀 3523·2021-11-17 17:01
閱讀 3933·2021-11-08 13:12
閱讀 2487·2021-10-08 10:04
閱讀 706·2021-09-29 09:35
閱讀 1428·2021-09-26 10:12
閱讀 2055·2021-09-07 09:58
閱讀 1964·2019-08-30 15:55
閱讀 2142·2019-08-30 13:14