1. 程式人生 > >Node實戰(第2季)5 基於Koa快速開發Web應用

Node實戰(第2季)5 基於Koa快速開發Web應用

   講解ES6中生成器、yield,以及Node.js下一代Web開發框架--Koa及其中介軟體的用法。

5.1 ES6時代的來臨

   ECMAScript6,簡稱ES6,也稱作ECMAScript2015,於2015年6月正式定稿。ES6是一次重大升級,是自2009年釋出的ES5規範後的首次更新。

   function和function* :function*就是上面提到的生成器函式

function* helloWorldGeneratorFunction() {
  var hello = yield 'hello';
  console.log(hello);
  var world = yield 'world';
  console.log(world);
  return '!';
}

   生成器函式也是函式,所以擁有所有函式的特性。比如作用域、閉包,以及遇到第一個return會執行結束等。生成器函式又有些普通函式沒有的特性,比如可以使用yield並且yield只能在生成器函式內使用,如果在普通函式內使用yield將會報錯。

   yield和yield*:Array與String、arguments、Generator、Object。

   區別在於:yield只返回右右值,而yield*則將函式委託(delegate)到另一個生成器(Generator)或可迭代的物件(如物件串、陣列、類陣列argument,以及ES6中的Map、Set等)。

   co和Koa:Koa是基於Generator和co開發的新一代中介軟體框架。

5.2 模板系統

   ejs和co-ejs:ejs是常用的模板引擎之一,co-ejs是經過改造ejs原始碼以支援生成器函式的一種嘗試。所理解的模板引擎是將定義好的模板與靜態資料(如JSON)結合渲染生成HTML。

  過濾器

5.3 路由

   在使用Express開發時,比較好的方式就是將路由寫到一個檔案中,如router.js

5.4 引數驗證與錯誤處理

   koa-scheme

   koa-errorhandler:   

5.5 快取和配置

   koe-router-cache和co-cache:當一個網站的訪問量越來越大後,增加快取是提升效能的一個既簡單又有效的方式。增加快取的方式大同小異,無非是將快取層放到業務邏輯層之前,當請求到到達時,首先經過快取層,如果命中快取則直接返回,如果沒有命中則傳遞到業務邏輯層。快取的更新機制也大同小異,通常有兩種方式:一種是設定一個定時器定時更新快取,一種是當業務邏輯層執行結束後更新快取。第一種方式簡單卻浪費資源,第二種方式程式碼耦合嚴重也不優雅。而基於Koa的中介軟體特性,我們可以寫出既簡單又優雅也不耦合的快取中介軟體。

   config-lite:不管是小專案還是大專案,將配置與程式碼分離是一種非常好的做法。我們通常將配置寫到一個配置檔案裡,如config.js/config.json,並放到專案的根目錄下。

5.6 測試

   測試是軟體開發過程中必不可少的一環,沒有經過測試的程式是不完整的,也是沒有保證的。手工測試既煩瑣又容易出現人為失誤,所以自動化測試變得越來越流行。在專案開發過程中,如何保證新增新功能後,之前的功能也都是可用的呢?如果沒有寫測試用例,那麼需要從頭挨個測試功能點;如果之前為每個功能都寫了測試,那麼只需執行一遍測試程式。

   單元測試:自動化測試中的一種,是針對程式模組(軟體設計的最小單位)來進行正確性檢驗的測試工作。程式單元是應用的最小的可測試部件。在過程化程式設計中,一個單元就是單個程式、函式、過程等;對於面向物件程式設計,最小單元就是方法,包括基類(超類)、抽象類、或者派生類(子類)中的方法。

   單元測試又有許多風格,常見的兩個風格有:測試驅動開發(TDD)和行為驅動開發(BDD),二者最主要的區別在於:TDD關注所有功能是否被正確實現,每個功能都具備對應的測試用例;BDD強調的是系統最終的實現與使用者期望的行為是否一致,驗證程式碼實現是否符合設計目標。

   co-mocha和co-supertest

5.7 開發一個論壇系統

   Nodeclub是一個優秀的開源論壇系統,已經在Node.js中文技術社群。

   路由和功能設計

   自定義模型

   theme的設計

   註冊

   登入與登出

   主頁與版塊

   使用者頁

   發表頁與話題頁

   測試

   部署:使用pm2,申請MongoLab,部署到Heroku(雲服務平臺)

https://github.com/nswbmw/N-club

相關推薦

Node實戰25 基於Koa快速開發Web應用

   講解ES6中生成器、yield,以及Node.js下一代Web開發框架--Koa及其中介軟體的用法。 5.1 ES6時代的來臨    ECMAScript6,簡稱ES6,也稱作ECMAScript2015,於2015年6月正式定稿。ES6是一次重大升級,是自2009年

Node實戰2 2 開發OAuth2認證伺服器

   REST+JSON風格的API和SOAP+XML相比,其好處是呼叫更加靈活,也更容易擴充套件,另外JSON格式傳輸資訊比XML減少約30%的資料量,效率更高。因此在搭建API伺服器時,往往首選REST風格的API。當API伺服器對外提供服務時,需要一種方式來驗證API

Node.js實戰2》試讀感想

看到這本書的目錄 立刻讓我精神抖擻 ,特別是“開發OAuth2認證伺服器”這個章節 ,上面描述的實現大致章節標題 比如用到了目前流行的restful api,因為之前 我也搞過oauth2 ,不過是用  Apache Oltu 整合shiro實現的 java版本的 OAuth

《R語言實戰2》高清中文版PDF+高清英文版PDF+源代碼

英文版 高清 r語言 color pro mar ffffff text 技術分享 下載:https://pan.baidu.com/s/1DMDKWi9RPs4pYNbK1Kvc_A 《R語言實戰(第2版)》高清中文版PDF+高清英文版PDF+源代碼 高清中文版558頁,

[分享]《Flask Web開發基於Python的Web應用開發實戰2》中文PDF+源代碼

全面介紹 flask 技術 ESS nfs 圖片 ges web應用開發 復制粘貼 下載:Flask Web開發第二版《Flask Web開發:基於Python的Web應用開發實戰》第二版中文PDF,324頁,帶目錄和書簽,文字能夠復制粘貼;配套源代碼;經典書籍第二版,講解

習題2.5 兩個有序鏈表序列的合並15 分浙大版《數據結構2》題目集

merge 其中 接口 cnblogs oid color 給定 style bsp 本題要求實現一個函數,將兩個鏈表表示的遞增整數序列合並為一個非遞減的整數序列。 函數接口定義: List Merge( List L1, List L2 ); 其中Lis

以前寫的兩本書《安全之路:Web滲透技術及實戰案例解析2》和《黑客攻防實戰加密與解密》

Web滲透技術及實戰案例解析 黑客攻防實戰加密與解密 應一些朋友的要求,我重新將書封面和購買地址發一下說明一下:www.antian365.com原來域名轉移到國外去了。現在國家對境外域名在國內訪問必須實名制,進行備份啥的,情況你懂的。最近正在制作《黑客攻防實戰加密與解密》的視頻課程,對黑客攻防過程遇

(Flask Web開發:基於Python的Web應用開發實戰)------學習筆記2

第2章 程式的基本結構 本章將帶你瞭解 Flask 程式各部分的作用,編寫並執行第一個 Flask Web 程式。 2.1 初始化   所有 Flask 程式都必須建立一個程式例項,程式例項是 Flask 類的物件。   Web 伺服器使用一種名為 Web 伺服器閘

《C語言程式設計:現代方法2K.N.King 著》學習筆記六:C語言基本概念5

問與答 GCC 最初是 GNU C Compiler 的簡稱。現在指 GNU Compiler Collection,這是因為最新版本的 GCC 能夠編譯用 Ada、C、C++、Fortran、Ja

《Java開發實戰1200例》2學習筆記—TCP網路通訊

例項313:使用Socket通訊 通過Socket類的getInputStream()方法獲得輸入流物件,並藉助InputStreamReader類將輸入流物件轉換為BufferedReader物件讀取接收到的資訊,使用getOutputStream()方法獲

Android程式設計權威指南25章挑戰練習

5.5 挑戰練習 (1)使用者作弊後,可以旋轉CheatActivity來清除作弊痕跡 這個可以用書本前面讓題目橫屏後不重置的方法來進行: 新建兩個常量和一個變數 private static final String TAG = "CheatActivity"; pri

《TensorFlow:實戰Google深度學習框架2》高清中文版PDF下載

《TensorFlow:實戰Google深度學習框架(第2版)》高清中文版PDF下載 領域旗艦重磅升級 新老谷歌專家聯袂 首度全面支援1.4.x程式碼 大量增補新版獨有核心功能 下載地址:https://pan.baidu.com/s/1uijUhufBV6nXNgz-VxZUGQ備用地址:https:/

演算法競賽入門經典2習題4-5 IP網路 IP Networks UVa1590

這道題的邏輯很簡單,讀入所有的ip地址,確認總共32位二進位制數中最左一個不同是在哪裡出現的,然後按規則輸出網路地址與子網掩碼即可。 可上傳後我發現它就是wa...還是wa...總是wa...... 然後我在網上找到了例程,設想出了很多測試資料,用fc拍來拍去,總是報告“找

《Java開發實戰1200例》2學習筆記—TCP套接字

Socket基礎 例項307:建立伺服器套接字 -通過ServerSocket類建立繫結到指定埠的伺服器套接字物件,然後呼叫ServerSocket類的accept()方法監聽客戶端的連線。 全部程式碼如下: import java.awt.Bo

演算法競賽入門經典2習題3-5 謎題Puzzle) Uva227

C++編寫 #include<iostream> using namespace std; int main() { int x = 2, y = 1; char Pu

學習《Spring實戰4版5章,按照書上的程式碼來敲的,可是報404

學習《Spring實戰(第4版)》第5章,按照書上的程式碼來敲的,可是tomcat起來之後,輸入url報404。工程檔案結構如下:檔案內容如下:tomcat能起來,但是輸入url報404,學習一直卡在這裡:希望看到的大神能解答一下,謝謝

演算法競賽入門經典2習題4-5 IP網路UVa1590

#include <stdio.h> #include <string.h> int twoip[1005][35]; void changetwo(int num, int i, int j) { int q, chu = num; //printf("%d %d %d\n",

數據庫系統工程師教程2目錄

體系結構 多媒體 觸發 評估 實現 決策 可靠性 邏輯結構設計 視頻 北漂不易,為了所謂的“綠卡”,也為了以後能夠讓為孩子創造更好的條件;同時也為了充實下自己,終於下定決心,努力吧。 先從軟考開始《數據庫系統工程師教程》中級,以下純手碼,共勉 第

精通CSS:高級Web標準解決方式2

avi css dsm table 段落 空元素 支持 :after med 精通CSS:高級Web標準解決方式(第2版) 跳轉至: 導航、 搜索 層疊重要度:(也就是說。用戶!important能夠覆蓋inline style)

PostgreSQL即學即用2pdf

pla 通過 3.3 back 系統文件 pga 靈活 多條 ext 下載地址: 網盤下載 內容簡介 · · · · · ·本書將幫助你理解和使用PostgreSQL 這一開源數據庫系統。你不僅會學到版本9.2、9.3 和9.4中的企業級特性,還會發現PostgreSQ