Node.js+MongoDB+AngularJS Web開發 ( 簡體 字) |
作者:盧濤,李穎 | 類別:1. -> 程式設計 -> 網路編程 -> Node.js 2. -> 資料庫 -> MongoDB 3. -> 程式設計 -> 網路編程 -> AngularJS |
譯者: |
出版社:電子工業出版社 | 3dWoo書號: 41670 詢問書籍請說出此書號!【缺書】 NT售價: 540 元 |
出版日:6/1/2015 |
頁數:592 |
光碟數:0 |
|
站長推薦: |
印刷:黑白印刷 | 語系: ( 簡體 版 ) |
|
加入購物車 │加到我的最愛 (請先登入會員) |
ISBN:9787121261176 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言:第2章 譯者序 隨著互聯網的發展,曾幾何時,“全棧工程師”(Full Stack Engineer)的概念開始興起,這種職位要求應征者對開發堆棧的每個方面都有所掌握,包括服務器、網絡及宿主環境、數據建模、業務邏輯、API/Action/MVC、用戶界面等。過去,這意味著全棧工程師需要面對歸屬不同層次的多種軟件環境和語言,并處理各層之間的交互,這些技術中的任何一種都要耗費大量的精力和時間來學習,因而會面臨很大的挑戰。現在,這種情況已經改變,JavaScript語言既可用于客戶端開發,又能用于編寫服務器端應用程序,還能方便地與傳統及新型數據庫交互,其中有些代碼還能復用,從而為開發功能豐富的互聯網應用程序創造了良好的條件。 Node.js是一種領先的服務器端編程環境,它和Express的結合能夠實現高度可擴展的動態Web服務器,并可用JavaScript編寫Web服務。 MongoDB是目前最流行的NoSQL數據庫,可用于Web應用程序數據的存儲,并能從Node.js JavaScript代碼訪問。 AngularJS正迅速成為基于MVC的前端開發的領先框架,它的自定義指令擴展了HTML語言。 這三者整合在一起使得能夠完全用JavaScript創建從服務器到客戶端瀏覽器的高性能站點和應用程序。 本書提供了將這3種技術整合成全面的有效解決方案的完整指南。它簡要而清晰地講述了這3種技術,然后迅速轉到構建幾種常見的Web應用程序上面。最后還用多個實際的例子實現了可以與Node.js Web服務器交互的客戶端服務,為用戶提供了豐富的交互功能的動態瀏覽器視圖,以及為Web網頁添加用戶身份驗證和嵌套評論等組件。 作者Brad Dayley是一名高級軟件工程師,精通jQuery、JavaScript、MongoDB,著有多本技術書籍,并在企業應用程序及Web界面方面具有豐富的開發經驗,本書正是他對實際工作成果的總結。 通過學習本書,讀者將學會如何使用Node.js和MongoDB來建立更具可擴展性的高性能網站,如何利用AngularJS創新的MVC方法構建更有效的網頁和應用程序,以及如何把這三者結合在一起使用,從而提供卓越的下一代Web解決方案。 感謝李綠霞、盧林、陳克非、李洪秋、張慧珍、李又及、盧曉瑤、陳克翠、湯有四、李陽、劉雯、賈書民、蘇旭暉對本書翻譯工作的貢獻。 感謝我們的兒子盧?一小朋友,他知道我們在翻譯書稿就常常自己安靜地讀書和玩耍,還放棄了很多出去玩的機會,讓我們能夠專注于本書的翻譯,本書的出版也有他的一份貢獻。 最后,希望這本書能對讀者有所助益。但由于譯者經驗和水平有限,譯文中難免有不妥之處,懇請讀者批評指正!
盧濤 李穎 2015年5月9日
致 謝 謹以此篇向所有為本書做出貢獻的人致謝。首先,我要感謝我的賢妻,感謝她給予我靈感、愛和支持。沒有你,我不會寫就此書。我還要感謝我的兒子們,感謝在寫作時間里你們給予我的支持,以及你們帶給我的歡樂時光。 感謝Mark Taber確保此書順利出版;感謝Russell Kloepfer 和 Siddhartha Singh,他們的技術審查使我能夠保持誠實;Kitty Wilson將“源于我的頭腦中的技術”隨筆轉換成優美的文字;Tammy Graham和Laura Robbins則負責本書所有圖形的設計;本書這個超炫的封面是由Chuti Prasertsith設計的;而Elaine Wiley負責這個項目,并確保這本書是最優質的。 作者簡介 Brad Dayley是一名高級軟件工程師,在開發企業應用程序及Web界面方面,他擁有超過20年的工作經驗。他熟練應用JavaScript和jQuery多年,并是jQuery and JavaScript Phrasebook 和 Teach Yourself jQuery and JavaScript in 24 Hours的作者。他曾設計并實現了一大批應用程序和服務——從應用服務器到復雜的Web 2.0界面。同時,他還著有Python Developer’s Phrasebook和 Teach Yourself Django in 24 Hours。
第2章 前 言 歡迎閱讀本書。本書將引領你進入使用JavaScript的世界——在你的Web開發項目中,從服務器和服務到瀏覽器客戶端。本書涵蓋Node.js、MongoDB和AngularJS的實現和集成,而它們是Web開發世界中新興的一些最令人興奮和創新的技術。 本篇前言包括: 本書受眾; 為什么要閱讀本書; 從本書你將了解到的知識; Node.js、MongoDB和AngularJS分別是什么,以及為什么它們都是出色的技術; 本書的組織結構; 在哪里可以找到代碼示例。 讓我們開始吧。 本書受眾 這本書假定讀者已經對HTML的基礎知識有所了解,并可以用現代編程語言完成一些編程。讀者如果對JavaScript有一定了解,將更容易理解本書的內容;但這不是必需的,因為本書確實也涵蓋了JavaScript的基礎知識。 為什么要閱讀本書 這本書將教你如何創建功能強大的互動網站和Web應用程序——從Web服務器和服務器上的服務到基于瀏覽器的交互式Web應用程序。這里所涉及的技術都是開源的,在服務器端組件和瀏覽器端的組件上你都可以使用JavaScript。 這本書的大多數讀者想要掌握Node.js和MongoDB,以便可以達到構建高度可擴展和高性能網站的目的。大多數讀者也想利用AngularJS創新的MVC方法來實現精心設計和結構化的網頁和Web應用程序。總之,Node.js、MongoDB和AngularJS提供了一個易于實現并完全集成的Web開發套件,它可以讓你實現神奇的Web 2.0應用程序。 從本書你將了解到的知識 閱讀本書將幫助你構建現實中的動態網站和Web應用程序。網站不再由HTML頁面和集成的圖像及格式化的文本等簡單的靜態內容構成。相反,網站變得更加動態,單個網頁往往充當一個完整的網站或應用程序。 使用AngularJS技術,可讓你在網頁中構建邏輯,這可以與Node.js服務器相互通信并從MongoDB數據庫獲取必要的數據。Node.js、MongoDB和AngularJS 的組合可以讓你實現交互式動態網頁。通過閱讀本書,你將學會如下的事情: 如何使用Node.js和Express來實現一個高度可擴展的動態Web服務器; 如何在JavaScript中創建服務器端的Web服務; 如何在Web應用程序中實現MongoDB的數據存儲; 如何用Node.js JavaScript代碼實現對MongoDB的訪問和交互; 如何定義靜態和動態Web路由并實現服務器端腳本來支持它們; 如何定義擴展HTML語言的你自己自定義的AngularJS指令; 如何實現可以與Node.js Web服務器交互的客戶端服務; 如何建立提供豐富的用戶交互的動態瀏覽器視圖; 如何將用戶賬戶的身份驗證添加到網站/Web應用程序; 如何將嵌套的評論組件添加到網頁; 如何建立一個端到端的購物車。 何為Node.js Node.js是基于谷歌的V8 JavaScript引擎的開發框架。你可以用JavaScript編寫Node.js代碼,然后V8將它編譯為要執行的機器代碼。你可以用Node.js編寫出大部分,或者甚至全部的服務器端代碼,包括Web服務器、服務器端的腳本和任何支持Web應用程序的功能。Web服務器和支持Web應用程序的腳本在同一個服務器端應用程序中運行這一事實,允許在Web服務器和腳本之間有更緊密的集成。 Node.js之所以是一個出色的框架,基于下面幾個原因。 JavaScript端到端:Node.js最大的一個優點是,它可以讓你用JavaScript同時編寫服務器端和客戶端腳本。在決定是把邏輯放入客戶端腳本還是服務器端腳本方面一直有困難。利用Node.js,你可以在客戶端上編寫JavaScript,并輕松地在服務器上適應它,反之亦然。另外一個好處是,客戶端的開發者和服務器的開發者使用同一種語言。 事件驅動的可擴展性:Node.js應用獨特的邏輯來處理Web請求。使用Node.js,不是讓多個線程等待處理Web請求,而是采用一種基本的事件模型在同一個線程上處理它們。這使得Node.js Web服務器可以用傳統的Web服務器不能做到的方式進行擴展。 可擴展性:Node.js有很多的追隨者和非常活躍的開發社區。人們正在不斷提供新的模塊來擴展Node.js的功能。此外,在Node.js中安裝和包含新的模塊是非常簡單的,你可以在幾分鐘內擴展Node.js的項目來包含新的功能。 快速執行:建立Node.js,并在其中開發是超級容易的。在短短幾分鐘內就可以安裝Node.js,并擁有一個能工作的Web服務器。 何為MongoDB MongoDB是一個靈活的和可擴展性非常好的NoSQL數據庫。Mongo這個名字來自單詞“堆積如山”(humongous),用來強調MongoDB提供的可擴展性和性能。MongoDB為需要存儲諸如用戶評論、博客或其他條目數據的高流量的網站提供了出色的網站后端存儲,因為它可快速擴展并易于實現。 下面是MongoDB真正適合于Node.js套件的一些原因。 針對文檔:因為MongoDB是針對文檔的,所以數據在數據庫中存儲的格式,非常接近你在服務器端和客戶端腳本中處理它們的格式。這消除了把數據從行轉換為對象和轉換回來的需要。 高性能:MongoDB是目前性能最高的數據庫之一。尤其是在現在,有越來越多的人與網站進行交互,具有能夠支持大流量的后端是很重要的。 高可用性:MongoDB的復制模型使得它很容易維護可擴展性,同時保持高性能。 高可擴展性:MongoDB的結構使得它可以很容易地通過在多個服務器上對數據分片實現橫向擴展。 無SQL注入:MongoDB是不容易受到SQL注入攻擊的(也就是向Web表單或從瀏覽器的其他輸入中輸入SQL語句,從而危及數據庫的安全性)。這是因為對象被存儲為對象,不使用SQL字符串。 何為AngularJS AngularJS是由谷歌開發的客戶端框架。它是用JavaScript編寫的,帶有一個精簡過的jQuery庫。AngularJS背后的理論是提供一個框架,使得可以很容易地使用MVC框架實現設計良好的結構化網頁和應用程序。 AngularJS提供了在瀏覽器中處理用戶輸入、操縱客戶端上的數據及控制元素如何在瀏覽器界面上顯示的功能。下面是AngularJS具有的一些優勢。 數據綁定:AngularJS利用其強大的范圍機制,有一個將數據綁定到HTML元素的非常干凈的方法。 可擴展性:AngularJS架構允許你輕松地擴展語言的各個方面,以提供你自己的自定義實現。 整潔:AngularJS迫使你編寫整潔的、合乎邏輯的代碼。 可重用代碼:可擴展性和簡潔代碼的結合,使得很容易用AngularJS編寫可重用的代碼。事實上,在創建自定義服務的時候,此語言往往迫使你這樣做。 支持:谷歌正把大量資金投入到這個項目,這使得它比那些已失敗的類似舉措更具優勢。 兼容性:AngularJS基于JavaScript并與jQuery有著密切的聯系。這使得更易于開始將AngularJS整合到你的環境和重用在AngularJS框架結構內的現有代碼片段。 本書的組織結構 這本書分為6個主要部分: 第1部分“引言”,概述了Node.js、MongoDB和AngularJS之間的相互作用,并對這3種產品如何形成一個完整的Web開發套件進行了概述。第2章是JavaScript的初步介紹,它提供了實現Node.js和AngularJS代碼時,你需要用到的JavaScript語言的基本知識。 第2部分“學習Node.js”,涵蓋了Node.js的語言平臺,從安裝到實現Node.js模塊。這部分向你提供你需要的基本框架,以實現自己的自定義Node.js模塊以及Web服務器和服務器端腳本。 第3部分“學習MongoDB”,涵蓋了MongoDB數據庫,從安裝到與Node.js應用程序的集成。本部分將討論如何規劃你的數據模型,以滿足你的應用程序需求,以及如何從Node.js應用程序對MongoDB進行訪問和交互。 第4部分“使用Express使生活更輕松”,討論了Node.js的Express模塊以及如何利用它作為應用程序的Web服務器。你將學習如何為數據設置動態和靜態路由,以及如何實現安全性、緩存和Web服務器的其他基本功能。 第5部分“學習AngularJS”,涵蓋了AngularJS框架的架構,以及如何將它集成到Node.js套件。本部分介紹了創建自定義的HTML指令和在瀏覽器中利用的客戶端服務。 第6部分“建立實用的Web應用程序組件”,轉換了主題,給出了一些使用Node.js、MongoDB和AngularJS的端到端應用案例;這些案例為為Web應用程序提供用戶賬戶的身份驗證、評論部分,以及購物車。這部分還介紹了一些在Web應用程序中實現Web 2.0互動的方法。 獲取代碼示例 在本書中你會看到很多以代碼清單形式提供的代碼示例。每個清單的標題都包括源代碼的文件名。要訪問示例中使用的源代碼文件和圖片,請訪問如下網址: https://github.com/bwdbooks/nodejs-mongodb-angularjs-web-development 結束語 我希望你和我一樣喜歡學習Node.js、MongoDB和AngularJS。它們都是出色而創新的技術,使用起來真的充滿樂趣。很快,你就可以加入這一龐大的Web開發人員之列,和他們一起使用Node.js-to-AngularJS Web套件來建立交互式網站和Web應用程序了。我也希望你喜歡這本書! |
內容簡介:Node.js是一種領先的服務器端編程環境,MongoDB是最流行的NoSQL數據庫,而AngularJS正迅速成為基于MVC的前端開發的領先框架。它們結合在一起使得能夠完全用JavaScript創建從服務器到客戶端瀏覽器的高性能站點和應用程序。 本書為想要將這3種技術整合到全面的有效解決方案的Web程序員提供了完整指南。它簡潔而清晰地介紹了這3種技術,然后迅速轉到構建幾種常見的Web應用程序上面。 讀者將學會使用Node.js和MongoDB來建立更具可擴展性的高性能網站,并利用AngularJS創新的MVC方法構建更有效的網頁和應用程序,以及把這三者結合在一起使用,從而提供卓越的下一代Web解決方案。 |
目錄:第2章 目 錄 第1部分 引 言 第1章 介紹Node.js-to-AngularJS套件 3 1.1 了解基本的Web開發框架 3 1.1.1 用戶 4 1.1.2 瀏覽器 4 1.1.3 Web服務器 6 1.1.4 后端服務 6 1.2 了解Node.js-to-AngularJS套件組件 7 1.2.1 Node.js 7 1.2.2 MongoDB 8 1.2.3 Express 9 1.2.4 AngularJS 9 1.3 小結 10 1.4 下一章 10 第2章 JavaScript基礎 11 2.1 定義變量 11 2.2 了解JavaScript數據類型 12 2.3 使用運算符 13 2.3.1 算術運算符 13 2.3.2 賦值運算符 14 2.3.3 運用比較和條件運算符 14 2.4 實現循環 16 2.4.1 while循環 17 2.4.2 do/while循環 17 2.4.3 for循環 17 2.4.4 for/in循環 18 2.4.5 中斷循環 19 2.5 創建函數 19 2.5.1 定義函數 20 2.5.2 傳遞變量給函數 20 2.5.3 從函數返回值 20 2.5.4 使用匿名函數 21 2.6 理解變量作用域 22 2.7 使用JavaScript對象 22 2.7.1 使用對象語法 23 2.7.2 創建自定義對象 23 2.7.3 使用原型對象模式 24 2.8 處理字符串 25 2.8.1 合并字符串 26 2.8.2 在字符串中搜索子串 26 2.8.3 在一個字符串中替換單詞 27 2.8.4 將字符串分割成數組 27 2.9 使用數組 27 2.9.1 合并數組 28 2.9.2 遍歷數組 29 2.9.3 將數組轉換為字符串 29 2.9.4 檢查數組是否包含某個條目 29 2.9.5 在數組中添加條目和刪除條目 30 2.10 添加錯誤處理 30 2.10.1 try/catch塊 30 2.10.2 拋出你自己的錯誤 31 2.10.3 使用Finally 31 2.11 小結 32 2.12 下一章 32 第2部分 學習Node.js 第3章 開始使用Node.js 35 3.1 了解Node.js 35 3.1.1 誰在使用Node.js 35 3.1.2 Node.js的用途 36 3.2 Node.js安裝 36 3.2.1 縱觀Node.js安裝位置 36 3.2.2 驗證Node.js可執行文件 37 3.2.3 選擇Node.js IDE 37 3.3 使用Node.js包 38 3.3.1 什么是Node封裝模塊 38 3.3.2 了解Node包注冊表 38 3.3.3 使用Node包管理器 38 3.3.4 搜索Node封裝模塊 39 3.3.5 安裝Node封裝模塊 40 3.3.6 使用package.json 41 3.4 創建Node.js應用程序 43 3.4.1 創建Node.js模塊封裝 43 3.4.2 將一個Node.js封裝模塊發布到NPM注冊表 45 3.4.3 在Node.js應用程序中使用Node.js封裝模塊 46 3.5 將數據寫入控制臺 47 3.6 小結 49 3.7 下一章 49 第4章 在Node.js中使用事件、監聽器、定時器和回調 51 4.1 了解Node.js事件模型 51 4.1.1 比較事件回調和線程模型 51 4.1.2 在Node.js中阻塞I/O 52 4.1.3 會話示例 54 4.2 將工作添加到事件隊列 54 4.2.1 實現定時器 55 4.2.2 使用nextTick來調度工作 58 4.2.3 實現事件發射器和監聽器 59 4.3 實現回調 62 4.3.1 向回調函數傳遞額外的參數 63 4.3.2 在回調中實現閉包 64 4.3.3 鏈式回調 65 4.4 小結 66 4.5 下一章 66 第5章 在Node.js中處理數據I/O 67 5.1 處理JSON 67 5.1.1 把JSON轉換成JavaScript對象 67 5.1.2 把JavaScript對象轉換為JSON 68 5.2 使用Buffer模塊緩沖數據 68 5.2.1 了解緩沖數據 69 5.2.2 創建緩沖區 69 5.2.3 寫入緩沖區 70 5.2.4 從緩沖區讀取 71 5.2.5 確定緩沖區長度 72 5.2.6 復制緩沖區 73 5.2.7 對緩沖區切片 74 5.2.8 拼接緩沖區 75 5.3 使用Stream模塊來傳送數據 76 5.3.1 Readable流 76 5.3.2 Writable流 78 5.3.3 Duplex流 81 5.3.4 Transform流 82 5.3.5 把Readable流用管道輸送到Readable流 84 5.4 用Zlib壓縮與解壓縮數據 85 5.4.1 壓縮和解壓縮緩沖區 85 5.4.2 壓縮/解壓縮流 87 5.5 小結 88 5.6 下一章 88 第6章 從Node.js訪問文件系統 89 6.1 同步和異步文件系統調用 89 6.2 打開和關閉文件 90 6.3 寫入文件 91 6.3.1 簡單文件寫入 91 6.3.2 同步文件寫入 92 6.3.3 異步寫入文件 93 6.3.4 流式文件寫入 95 6.4 讀取文件 96 6.4.1 簡單文件讀取 96 6.4.2 同步文件讀取 97 6.4.3 異步文件讀取 98 6.4.4 流式文件讀取 100 6.5 其他文件系統任務 101 6.5.1 驗證路徑的存在性 101 6.5.2 獲取文件信息 102 6.5.3 列出文件 103 6.5.4 刪除文件 104 6.5.5 截斷文件 105 6.5.6 建立和刪除目錄 105 6.5.7 重命名文件和目錄 106 6.5.8 監視文件更改入 107 6.6 小結 107 6.7 下一章 107 第7章 在Node.js中實現HTTP服務 109 7.1 處理URL 109 7.1.1 了解URL對象 110 7.1.2 解析URL組件 111 7.2 處理查詢字符串和表單參數 111 7.3 了解請求、響應和服務器對象 112 7.3.1 http.ClientRequest對象 112 7.3.2 http.ServerResponse對象 114 7.3.3 http.IncomingMessage對象 115 7.3.4 HTTP Server對象 116 7.4 在Node.js中實現HTTP客戶端和服務器 118 7.4.1 提供靜態文件服務 118 7.4.2 實現動態的GET服務器 120 7.4.3 實現POST服務器 122 7.4.4 與外部源交互 124 7.5 實現HTTPS服務器和客戶端 127 7.5.1 創建HTTPS客戶端 127 7.5.2 創建HTTPS服務器 129 7.6 小結 129 7.7 下一章 129 第8章 在Node.js中實現套接字服務 131 8.1 了解網絡套接字 131 8.2 了解TCP服務器和Socket對象 132 8.2.1 net.Socket對象 132 8.2.2 net.Server對象 135 8.3 實現TCP套接字服務器和客戶端 137 8.3.1 實現TCP套接字客戶端 138 8.3.2 實現TCP套接字服務器 140 8.4 實現TLS服務器和客戶端 143 8.4.1 創建TLS套接字客戶端 144 8.4.2 創建TLS套接字服務器 145 8.5 小結 147 8.6 下一章 147 第9章 在Node.js中使用多處理器擴展應用程序 149 9.1 了解process模塊 149 9.1.1 了解進程I/O管道 149 9.1.2 了解進程的信號 150 9.1.3 使用process模塊控制進程執行 150 9.1.4 從process模塊獲取信息 151 9.2 實現子進程 153 9.2.1 了解ChildProcess對象 153 9.2.2 通過使用exec()在另一個進程上執行一個系統命令 154 9.2.3 使用execFile()在另一個進程上執行一個可執行文件 156 9.2.4 使用spawn()在另一個Node.js實例中產生一個進程 157 9.2.5 實現子派生 159 9.3 實現進程集群 161 9.3.1 使用cluster模塊 162 9.3.2 了解Worker對象 163 9.3.3 實現一個HTTP集群 164 9.4 小結 166 9.5 下一章 166 第10章 使用其他Node.js模塊 167 10.1 使用os模塊 167 10.2 使用util模塊 169 10.2.1 格式化字符串 169 10.2.2 檢查對象類型 170 10.2.3 同步寫入輸出流 170 10.2.4 將JavaScript對象轉換為字符串 170 10.2.5 從其他對象繼承功能 171 10.2.6 使用dns模塊 172 10.3 小結 174 10.4 下一章 174 第3部分 學習MongoDB 第11章 了解NoSQL和MongoDB 177 11.1 為什么要采用NoSQL 177 11.2 了解MongoDB 178 11.2.1 理解集合 178 11.2.2 了解文檔 178 11.3 MongoDB的數據類型 179 11.4 規劃你的數據模型 180 11.4.1 使用文檔引用來規范化數據 181 11.4.2 使用嵌入式文檔反規范化數據 182 11.4.3 使用封頂集合 183 11.4.4 了解原子寫操作 184 11.4.5 考慮文件增長 184 11.4.6 識別索引、分片和復制的機會 184 11.4.7 大集合與大量集合的對比 185 11.4.8 決定數據生命周期 185 11.4.9 考慮數據的可用性和性能 185 11.5 小結 186 11.6 下一章 186 第12章 MongoDB入門 187 12.1 構建MongoDB的環境 187 12.1.1 MongoDB的安裝 187 12.1.2 啟動MongoDB 188 12.1.3 停止MongoDB 189 12.1.4 從shell客戶端訪問MongoDB 189 12.2 管理用戶賬戶 192 12.2.1 列出用戶 192 12.2.2 創建用戶賬戶 193 12.2.3 刪除用戶 194 12.3 配置訪問控制 194 12.3.1 創建用戶管理員賬戶 195 12.3.2 打開身份驗證 196 12.3.3 創建數據庫管理員賬戶 196 12.4 管理數據庫 197 12.4.1 顯示數據庫清單 197 12.4.2 切換當前數據庫 197 12.4.3 創建數據庫 197 12.4.4 刪除數據庫 198 12.4.5 復制數據庫 198 12.5 管理集合 199 12.5.1 顯示數據庫中的集合列表 199 12.5.2 創建集合 199 12.5.3 刪除集合 200 12.5.4 在集合中查找文檔 201 12.5.5 將文檔添加到集合中 201 12.5.6 從集合中刪除文檔 202 12.5.7 更新集合中的文檔 202 12.6 小結 204 12.7 下一章 204 第13章 MongoDB和Node.js入門 205 13.1 把MongoDB的驅動程序添加到Node.js 205 13.2 從Node.js連接到MongoDB 206 13.2.1 了解寫入關注 206 13.2.2 了解Server對象 206 13.2.3 通過Client對象連接到MongoDB 207 13.2.4 通過一個連接字符串連接到MongoDB 210 13.3 了解用在MongoDB Node.js驅動程序中的對象 211 13.3.1 了解Db對象 212 13.3.2 了解Admin對象 213 13.3.3 了解Collection對象 214 13.3.4 了解Cursor對象 215 13.4 訪問和操作數據庫 216 13.4.1 列出數據庫 217 13.4.2 創建數據庫 217 13.4.3 刪除數據庫 217 13.4.4 創建、列出和刪除數據庫實例 218 13.4.5 獲取MongoDB服務器的狀態 219 13.5 訪問和操作集合 220 13.5.1 列出集合 220 13.5.2 創建集合 221 13.5.3 刪除集合 221 13.5.4 創建、列出和刪除集合的示例 221 13.5.5 獲取集合信息 222 13.6 小結 223 13.7 下一章 223 第14章 從Node.js操作MongoDB文檔 225 14.1 了解數據庫更改選項 225 14.2 了解數據庫更新運算符 226 14.3 將文檔添加到集合 227 14.4 從集合獲取文檔 229 14.5 更新集合中的文檔 230 14.6 原子地修改文檔的集合 232 14.7 保存集合中的文檔 234 14.8 使用upsert往集合中插入文檔 235 14.9 從集合中刪除文檔 236 14.10 從集合中刪除單個文檔 238 14.11 小結 240 14.12 下一章 240 第15章 從Node.js訪問MongoDB的文檔 241 15.1 介紹數據集 241 15.2 了解Query對象 242 15.3 了解查詢options對象 243 15.4 查找特定文檔集合 244 15.5 清點文檔數量 247 15.6 對結果集進行限制 249 15.6.1 按大小限制結果 249 15.6.2 限制對象返回的字段 250 15.6.3 對結果進行分頁 252 15.7 對結果集進行排序 253 15.8 查找不同的字段值 255 15.9 對結果進行分組 256 15.10 通過聚合結果來應用MapReduce 259 15.10.1 了解aggregate()方法 259 15.10.2 使用聚合框架運算符 260 15.10.3 實現聚合表達式運算符 261 15.10.4 聚合的例子 262 15.11 小結 263 15.12 下一章 264 第16章 利用Mongoose來使用結構化模式與驗證 265 16.1 了解Mongoose 265 16.2 利用Mongoose連接到MongoDB數據庫 266 16.3 定義模式 267 16.3.1 了解路徑 268 16.3.2 創建一個模式定義 268 16.3.3 把索引添加到一個模式 269 16.3.4 實現字段的唯一性 269 16.3.5 強制字段的必需性 270 16.3.6 添加Schema對象的方法 270 16.3.7 在words數據庫上實現一個模式 270 16.4 編譯模型 271 16.5 了解Query對象 272 16.5.1 設置查詢數據庫操作 273 16.5.2 設置查詢數據庫操作選項 274 16.5.3 設置查詢運算符 275 16.6 了解Document對象 276 16.7 利用Mongoose查找文檔 278 16.8 利用Mongoose添加文檔 280 16.9 利用Mongoose更新文檔 281 16.9.1 保存文檔更改 282 16.9.2 更新單個文檔 283 16.9.3 更新多個文檔 284 16.10 利用Mongoose刪除文檔 286 16.10.1 刪除單個文檔 286 16.10.2 刪除多個文檔 287 16.11 利用Mongoose聚合文檔 288 16.12 使用驗證框架 291 16.13 實現中間件函數 293 16.14 小結 295 16.15 下一章 295 第17章 高級MongoDB概念 297 17.1 添加索引 297 17.2 使用封頂集合 299 17.3 應用復制 300 17.3.1 復制策略 302 17.3.2 部署一個副本集 302 17.4 實施分片 303 17.4.1 分片服務器類型 304 17.4.2 選擇一個分片鍵 305 17.4.3 選擇一種分區方法 306 17.4.4 部署一個分片的MongoDB集群 307 17.5 實現一個GridFS Store 310 17.5.1 在Node.js實現Grid對象 311 17.5.2 在Node.js實現GridStore對象 313 17.6 修復MongoDB數據庫 315 17.7 備份MongoDB 316 17.8 小結 317 17.9 下一章 317 第4部分 使用Express使生活更輕松 第18章 在Node.js中實現Express 321 18.1 Express入門 321 18.1.1 配置Express設置 321 18.1.2 啟動Express服務器 322 18.2 配置路由 323 18.2.1 實現路由 323 18.2.2 在路由中應用參數 324 18.3 使用Request對象 328 18.4 使用Response對象 330 18.4.1 設置標頭 330 18.4.2 設置狀態 331 18.4.3 發送響應 331 18.4.4 發送JSON響應 333 18.4.5 發送文件 335 18.4.6 發送下載響應 336 18.4.7 重定向響應 336 18.5 實現一個模板引擎 337 18.5.1 定義一個模板引擎 338 18.5.2 加入本地對象 338 18.5.3 創建模板 339 18.5.4 在響應中呈現模板 340 18.6 小結 342 18.7 下一章 342 第19章 實現Express中間件 343 19.1 了解中間件 343 19.1.1 在全局范圍內把中間件分配給某個路徑 344 19.1.2 把中間件分配到單個路由 345 19.1.3 添加多個中間件函數 345 19.2 使用query中間件 345 19.3 提供靜態文件服務 346 19.4 處理POST正文數據 348 19.5 發送和接收cookie 349 19.6 實現會話 350 19.7 應用基本的HTTP身份驗證 352 19.8 實現會話身份驗證 354 19.9 創建自定義中間件 356 19.10 小結 357 19.11 下一章 357 第5部分 學習AngularJS 第20章 AngularJS入門 361 20.1 為什么選擇AngularJS 361 20.2 了解AngularJS 362 20.2.1 模塊 362 20.2.2 作用域和數據模型 363 20.2.3 具有模板和指令的視圖 363 20.2.4 表達式 363 20.2.5 控制器 363 20.2.6 數據綁定 364 20.2.7 服務 364 20.2.8 依賴注入 364 20.2.9 職責分離 364 20.3 AngularJS生命周期概述 365 20.3.1 引導階段 365 20.3.2 編譯階段 365 20.3.3 運行時數據綁定階段 366 20.4 將AngularJS與現有的JavaScript和jQuery整合 366 20.5 將AngularJS添加到Node.js的環境 367 20.6 在HTML文檔中引導AngularJS 367 20.7 使用全局API 368 20.8 創建基本的AngularJS應用程序 369 20.8.1 加載AngularJS庫和你的主模塊 370 20.8.2 定義AngularJS應用程序根元素 370 20.8.3 將控制器添加到模板 370 20.8.4 實現作用域模型 371 20.9 小結 372 20.10 下一章 372 第21章 了解AngularJS模塊和依賴注入 373 21.1 模塊和依賴注入概述 373 21.1.1 了解模塊 373 21.1.2 依賴注入 374 21.2 定義AngularJS模塊 374 21.2.1 創建AngularJS Module對象 374 21.2.2 使用配置塊 375 21.2.3 使用運行塊 375 21.2.4 把提供器添加到AngularJS模塊 376 21.3 實現依賴注入 377 21.4 小結 379 21.5 下一章 380 第22章 把作用域實現為數據模型 381 22.1 了解作用域 381 22.1.1 根作用域和應用程序之間的關系 381 22.1.2 作用域和控制器之間的關系 382 22.1.3 作用域和模板之間的關系 383 22.1.4 作用域和后端服務器數據之間的關系 385 22.1.5 作用域的生命周期 385 22.2 實現作用域層次結構 387 22.3 發出和廣播活動 389 22.4 小結 392 22.5 下一章 393 第23章 使用AngularJS模板來創建視圖 395 23.1 了解模板 395 23.2 使用表達式 396 23.3 使用過濾器 399 23.3.1 使用內置過濾器 400 23.3.2 使用過濾器來實現排序和過濾 402 23.4 創建自定義過濾器 405 23.5 小結 406 23.6 下一章 407 第24章 在AngularJS視圖中實現指令 409 24.1 了解指令 409 24.2 使用內置指令 409 24.2.1 支持AngularJS功能的指令 410 24.2.2 擴展表單元素的指令 411 24.2.3 把模型綁定到頁面元素的指令 414 24.2.4 把頁面事件綁定到控制器的指令 418 24.3 創建你自己的指令來擴展HTML 420 24.3.1 定義指令視圖模板 421 24.3.2 限制指令行為 422 24.3.3 更換模板元素 423 24.3.4 轉置外部作用域 423 24.3.5 配置指令的作用域 423 24.3.6 操縱DOM的鏈接功能 425 24.3.7 添加一個控制器到指令 426 24.3.8 創建自定義指令 426 24.4 小結 428 24.5 下一章 429 第25章 在Web應用程序中實現AngularJS服務 431 25.1 了解AngularJS服務 431 25.2 使用內置的服務 431 25.2.1 使用$http服務發送HTTP的GET和PUT請求 432 25.2.2 使用$cacheFactory服務 436 25.2.3 使用$window服務實現瀏覽器警報 437 25.2.4 使用$cookieStore服務與瀏覽器cookie交互 437 25.2.5 使用$interval和$timeout服務實現定時器 439 25.2.6 使用$animate服務 440 25.3 創建自定義服務 445 25.3.1 創建value服務 445 25.3.2 創建constant服務 445 25.3.3 創建factory服務 445 25.3.4 創建service服務 446 25.3.5 把服務集成在一個模塊中 446 25.4 小結 447 25.5 下一章 447 第6部分 建立實用的Web應用程序組件 第26章 將用戶賬戶添加到你的網站 451 26.1 用到的庫 451 26.2 項目的目錄結構 451 26.3 定義用戶模型 452 26.4 創建服務器 453 26.5 實現路由 454 26.6 實現用戶控制器路由 456 26.6.1 實現用戶注冊路由 456 26.6.2 實現用戶登錄路由 457 26.6.3 實現獲得用戶配置文件的路由 457 26.6.4 實現更新用戶路由 458 26.6.5 實現刪除用戶路由 458 26.6.6 完整的用戶控制器代碼 459 26.7 實現用戶和身份驗證視圖 461 26.7.1 實現signup視圖 461 26.7.2 實現index視圖 462 26.7.3 實現login視圖 463 26.7.4 實現user視圖 464 26.7.5 添加CSS代碼到樣式視圖 466 26.8 實現AngularJS模塊和控制器 466 26.9 使用社交媒體賬戶作為身份驗證來源 467 26.9.1 添加Passport 467 26.9.2 添加身份驗證策略 467 26.9.3 實現應用程序中間件 468 26.9.4 添加已驗證身份的用戶序列化和反序列化 469 26.9.5 實現路由以使用身份驗證 469 26.9.6 使用谷歌驗證身份 470 26.10 小結 473 26.11 下一章 473 第27章 添加評論主題頁 475 27.1 用到的庫 475 27.2 項目的目錄結構 475 27.3 定義評論、回復、照片和頁面模型 477 27.3.1 定義Page模型 477 27.3.2 定義Photo模型 478 27.3.3 定義CommentThread模型 478 27.4 創建評論服務器 479 27.5 實現路由,以支持查看和添加評論 480 27.6 實現基于模型的控制器路由 481 27.6.1 實現Page模型控制器 481 27.6.2 實現Photo模型控制器 482 27.6.3 實現CommentThread模型控制器 482 27.7 實現照片和評論視圖 486 27.7.1 實現照片視圖 486 27.7.2 實現評論主題視圖 489 27.7.3 實現評論視圖 491 27.7.4 添加CSS來設置視圖的樣式 492 27.8 實現AngularJS模塊和控制器來支持評論視圖 493 27.8.1 創建一個評論服務 493 27.8.2 實現照片控制器 494 27.8.3 實現頁面AngularJS控制器 495 27.8.4 完整的AngularJS應用程序 496 27.9 初始化應用程序 499 27.10 小結 500 27.11 下一章 500 第28章 創建你自己的購物車 501 28.1 項目簡介 501 28.2 用到的庫 502 28.3 項目的目錄結構 502 28.4 定義顧客、產品和訂單模式 504 28.4.1 定義地址模式 504 28.4.2 定義賬單模式 505 28.4.3 定義產品模式 505 28.4.4 定義數量模式 506 28.4.5 定義訂單模式 506 28.4.6 定義顧客模式 506 28.5 創建購物車服務器 508 28.6 實現路由,以支持產品、購物車和訂單請求 508 28.7 實現基于模型的控制器路由 509 28.7.1 實現產品模型控制器 509 28.7.2 實現訂單模型控制器 510 28.7.3 實現顧客模型控制器 511 28.8 實現購物車和結賬視圖 513 28.8.1 實現購物視圖 513 28.8.2 實現產品視圖 515 28.8.3 實現產品頁面視圖 516 28.8.4 實現購物車視圖 516 28.8.5 實現發貨視圖 518 28.8.6 實現賬單視圖 519 28.8.7 實現復核視圖 521 28.8.8 實現訂單視圖 523 28.8.9 添加CSS來設置視圖的樣式 524 28.9 實現AngularJS模塊和控制器,以支持購物車視圖 526 28.9.1 初始化購物作用域 526 28.9.2 實現輔助函數 527 28.9.3 將物品添加到購物車 527 28.9.4 從購物車刪除物品 528 28.9.5 結賬 529 28.9.6 設置發貨信息 529 28.9.7 驗證賬單 530 28.9.8 執行購買 530 28.9.9 完整的控制器 531 28.10 初始化應用程序 534 28.11 小結 536 28.12 下一章 536 第29章 構建交互式的Web 2.0應用程序組件 537 29.1 項目簡介 537 29.2 用到的庫 538 29.3 項目的目錄結構 538 29.4 定義項目模型 540 29.5 創建應用程序服務器 540 29.6 實現支持視圖的路由 541 29.7 實現選項卡視圖 542 29.7.1 創建AngularJS選項卡視圖模板 542 29.7.2 定義窗格模板 542 29.7.3 定義卡片模板 542 29.7.4 實現選項卡視圖 543 29.7.5 實現AngularJS自定義指令 544 29.7.6 設置卡片視圖的樣式 545 29.8 實現天氣服務視圖 546 29.8.1 創建后端天氣服務 546 29.8.2 定義天氣AngularJS控制器 548 29.8.3 定義天氣AngularJS視圖 549 29.8.4 設置天氣視圖的樣式 549 29.9 實現可拖動的元素 551 29.9.1 定義可拖動的自定義AngularJS指令 551 29.9.2 在AngularJS視圖中實現可拖動的指令 552 29.9.3 設置可拖動視圖的樣式 552 29.10 實現動態數據訪問 553 29.10.1 創建/words路由的Express路由控制器 553 29.10.2 定義表格AngularJS控制器 554 29.10.3 實現表格AngularJS視圖 556 29.10.4 設置表格視圖的樣式 557 29.11 初始化應用程序 558 29.12 小結 560 |
序: |