JavaScript >> Javascript 文檔 >  >> Node.js

使用 JS 進行快速原型製作的示例

使用 JS 進行快速原型設計 是一本實踐性書籍,向您介紹使用最新的尖端網絡和移動技術進行快速軟件原型設計,包括 NodeJS、MongoDB、BackboneJS、Twitter Bootstrap、LESS、jQuery、Parse.com、Heroku 等。

這是一個免費示例,第一章 - 簡介,使用 JS 進行快速原型設計 .您還可以從 LeanPub 獲取免費 PDF,並在 github.com/azat-co/rpjs 瀏覽代碼示例。購買完整版 以 PDF、Mobi/Kindle 和 ePub/iPad 格式訪問 leanpub.com/rapid-prototyping-with-js。

簡介

Rapid Prototyping with JS 是一本動手實踐的書,它向您介紹使用最新的尖端網絡和移動技術(包括 Node.js、MongoDB、Twitter Bootstrap、LESS、jQuery、Parse.com、Heroku 等)進行快速軟件原型設計。

本書的讀者對象

這本書是為高級初學者和中級 Web 和移動開發人員設計的:剛開始編程的人,以及其他語言專家,如 Ruby on Rails、PHP 和 Java,並想學習 JavaScript 和 Node.js。

從名稱中可以看出,使用 JS 進行快速原型設計是為了盡可能快地將您的想法以 Web 或移動應用程序的形式轉化為功能原型。這種思想遵循精益創業方法論;因此,這本書對初創公司的創始人來說會更有價值,但大公司的員工也可能會覺得它很有用,尤其是當他們打算在簡歷中添加新技能時。

先決條件

強烈建議將 Mac OS X 或 UNIX/Linux 系統用於本書的示例和一般的 Web 開發,儘管在基於 Windows 的系統上仍然可以破解。

一些雲服務即使是免費帳戶也需要用戶的信用卡/借記卡信息。

期待什麼

期待大量的編碼,而不是太多的理論。我們涵蓋的所有理論都與一些實際方面直接相關,對於更好地理解技術和處理它們的具體方法至關重要,例如 JSONP 和跨域調用。

除了編碼示例之外,本書還涵蓋了幾乎所有的設置和部署步驟。

您將從前端組件開始的留言板 Web/移動應用程序示例中學習。這些應用程序有幾個版本,但最終我們會將前端和後端放在一起並部署到生產環境。留言板應用程序包含基本 Web 應用程序所需的所有典型組件,並且會讓您有足夠的信心繼續自己開發、申請工作/升職或創辦一家初創公司!

這是本書的數字版本,因此大多數鏈接都像在任何其他網頁上一樣被隱藏,例如 jQuery 而不是 http://jquery.com。本書的內容有本地超鏈接,可以跳轉到任何部分。

本書中使用的所有示例源代碼都可以在本書以及公共 GitHub 存儲庫 github.com/azat-co/rpjs 中找到。您還可以將文件下載為 ZIP 存檔或使用 Git 提取它們。本書後面會詳細介紹如何安裝和使用 Git。源代碼文件、文件夾結構和部署文件應該在 PaaS 解決方案(即 Windows Azure 和 Heroku)上本地和/或遠程工作,只需稍作修改或無需修改。

符號

這是源代碼塊的樣子:

var object = {};
object.name = "Bob";

終端命令的外觀類似,但以美元符號開頭,$:

[旁注]

閱讀博客文章很好,但觀看視頻課程更好,因為它們更具吸引力。

許多開發人員抱怨 Node.js 上缺乏負擔得起的高質量視頻材料。觀看 YouTube 視頻會讓人分心,花 500 美元購買 Node 視頻課程很瘋狂!

去看看 Node University,它有關於 Node 的免費視頻課程:node.university。

[旁注結束]

$ git push origin heroku
$ cd /etc/
$ ls 

內聯文件名、路徑/文件夾名稱、引號和特殊單詞/名稱斜體 while 命令名稱,例如 mongod , 和強調的詞,例如,Note , 是粗體 .

網絡基礎

概覽

Web 和移動應用程序開發的大局包括以下步驟:

  1. 用戶在瀏覽器(也稱為客戶端)中鍵入 URL 或點擊鏈接;
  2. 瀏覽器向服務器發出 HTTP 請求;
  3. 服務器處理請求,如果查詢字符串和/或請求正文中有任何參數,則將其考慮在內;
  4. 服務器更新/獲取/轉換數據庫中的數據;
  5. 服務器以包含 HTML、JSON 或其他格式數據的 HTTP 響應進行響應;
  6. 瀏覽器收到 HTTP 響應;
  7. 瀏覽器以 HTML 或任何其他格式(例如 JPEG、XML、JSON)向用戶呈現 HTTP 響應。

移動應用程序的行為方式與常規網站相同,只是可能有一個原生應用程序而不是瀏覽器。其他細微差別包括:由於運營商帶寬而導致的數據傳輸限制、更小的屏幕以及更有效地使用本地存儲。

移動開發有幾種方法,各有優缺點:

  • 使用 Objective-C 和 Java 構建的原生 iOS、Android、Blackberry 應用;
  • 原生應用在 Appcelerator 中使用 JavaScript 構建,然後編譯為原生 Objective-C 或 Java;
  • 為小屏幕量身定制的移動網站,採用響應式設計、Twitter Bootstrap 或 Foundation 等 CSS 框架、常規 CSS 或不同模板;
  • 由 HTML、CSS 和 JavaScript 組成的 HTML5 應用,通常使用 Sencha Touch、Trigger.io、JO 等框架構建,然後使用 PhoneGap 封裝到原生應用中。

超文本標記語言

超文本標記語言或 HTML 本身並不是一種編程語言。它是一組標記標籤,用於描述內容並以結構化和格式化的方式呈現。 HTML 標記由 標記名稱 組成 尖括號 (<>) 內。在大多數情況下,標籤圍繞內容,結束標籤具有 正斜杠 在標籤名稱之前。

在這個例子中,每一行都是一個 HTML 元素:

<h2>Overview of HTML</h2>
<div>HTML is a ...</div>
<link rel="stylesheet" type="text/css" href="style.css" />

HTML 文檔本身就是 html 的一個元素 標籤和所有其他元素都是該 html 的子元素 標籤:

<!DOCTYPE html>
<html lang="en">
  <head>
    <link rel="stylesheet" type="text/css" href="style.css" />
  </head>
  <body>
    <h2>Overview of HTML</h2>
    <p>HTML is a ...</p>
  </body>
</html>

HTML 有不同的風格和版本,例如,DHTML、XHTML 1.0、XHTML 1.1、XHTML 2、HTML 4、HTML 5。這篇文章很好地解釋了這些差異——誤解標記:XHTML 2/HTML 5 Comic Strip。

更多信息請訪問 Wikipedia 和 w3schools。

層疊樣式表

層疊樣式表或 CSS 是一種格式化和呈現內容的方式。一個 HTML 文檔可以有多個帶有 link 標籤的樣式表 如前面的示例或 style 標籤:

<style>
  body {
  padding-top: 60px; /* 60px to make some space */
  }
</style>

每個 HTML 元素都可以有 id 屬性:

<div id="main" class="large">Lorem ipsum dolor sit amet,  Duis sit amet neque eu.</div>

在 CSS 中,我們通過元素的 id 訪問元素 , ,標籤名稱,在某些邊緣情況下通過父子關係或元素屬性值:

p {
  color:#999999;
}
div#main {
  padding-bottom:2em;
  padding-top:3em;
}
.large {
  font-size:14pt;
}
body > div {
  display:none;         
}
input[name="email"] {
  width:150px;
}

如需進一步閱讀的更多信息,請訪問 Wikipedia 和 w3schools。

CSS3 是對 CSS 的升級,其中包括新的處理方式,例如圓角、邊框和漸變,這在常規 CSS 中只有借助 PNG/GIF 圖像和其他技巧才能實現。

有關更多信息,請參閱 CSS3.info、w3school
和關於 Smashing 的 CSS3 與 CSS 比較文章。

JavaScript

JavaScript 於 1995 年在 Netscape 以 LiveScript 的形式出現。它與 Java 的關係就像倉鼠和火腿一樣 :)
它用於客戶端和服務器端開發以及桌面應用程序。

有一個腳本 在 HTML 文檔中使用 JavaScript 的標記:

<script type="text/javascript" language="javascript>
  alert("Hello world!");
  //simple alert dialog window
</script>

通常將 JavaScript 代碼與 HTML 分開是個好主意;在這個例子中,我們包括 app.js 文件:

<script src="js/app.js" type="text/javascript" language="javascript" />

以下是 JavaScript 對象/類的主要類型:

  • 數組對象,例如,var arr = ["apple", "orange", 'kiwi"];
  • 布爾原始對象,例如,var bool = true;
  • 日期對象,例如,var d = new Date();
  • 數學對象,例如,var x = Math.floor(3.4890);
  • 數字原始對象,例如,var num = 1;
  • 字符串原始對象,例如,var str = "some string";
  • RegExp 對象,例如 var pattern = /[A-Z]+/;
  • 全局屬性和函數,例如 NaN
  • 瀏覽器對象,例如 window.location = 'http://google.com';
  • DOM 對象,例如 var table = document.createElement('table');

w3school 上提供了完整的 JavaScript 和 DOM 對象和類參考以及示例。

函數聲明的典型語法:

function Sum(a,b) {
  var sum = a+b;
  return sum;
}
console.log(Sum(1,2));

由於語言的函數式編程性質,JavaScript 中的函數是一等公民。因此函數可以用作其他變量/對象;例如,函數可以作為參數傳遞給其他函數:

var f = function (str1){
  return function(str2){
  return str1+' '+str2;
  };
};
var a = f('hello');
var b = f('goodbye');
console.log((a('Catty'));
console.log((b('Doggy'));

與 C 和 Java 等語言中的強類型相反,JavaScript 具有鬆散/弱類型,這使得 JavaScript 成為更好的原型編程語言。

有關瀏覽器運行 JavaScript 的更多信息,請訪問 Wikipedia 和 w3schools。

敏捷方法

敏捷軟件開發方法的演變是由於傳統方法(如瀑布)在高度不可預測的情況下(即解決方案未知時)不夠好。敏捷方法論包括 Scrum/Sprint、測試驅動開發、持續部署、配對編程和其他許多實用技術,其中許多是從極限編程中藉來的。

Scrum

在管理方面,敏捷方法使用 Scrum 方法。更多關於 Scrum 的內容可以閱讀:

  • 維基百科,
  • Scrum 指南,
  • Scrum.org.

Scrum 方法論是一系列短週期,每個週期稱為sprint .一個衝刺 通常持續一到兩週。 Sprint 以 sprint 計劃會議開始和結束,在那裡可以將新任務分配給團隊成員。新任務不能添加到正在進行的 sprint 中;它們只能在 sprint 會議上添加。

Scrum 方法的一個重要部分是每日 scrum 會議,故名。每個 scrum 是一個 5-15 分鐘的會議,通常在走廊進行。在 scrum 上 會議每個團隊成員回答三個問題:

  1. 從昨天開始你做了什麼?
  2. 你今天要做什麼?
  3. 您需要其他團隊成員的幫助嗎?

靈活性使敏捷成為對瀑布方法的改進,尤其是在高度不確定的情況下,即初創公司。

Scrum 方法的優勢:在難以提前計劃的情況下有效,並且在使用反饋循環作為主要決策機構的情況下也很有效。

測試驅動開發

測試驅動開發(TDD)由以下步驟組成:

  1. 使用真假斷言為新功能/任務或增強功能編寫失敗的自動化測試用例。
  2. 編寫代碼以成功通過測試用例。
  3. 根據需要重構代碼,並在保持測試用例通過的同時添加功能。
  4. 重複直到任務完成。

測試驅動開發的優勢:

  • 錯誤/缺陷更少,
  • 更高效的代碼庫,
  • 讓程序員確信代碼可以正常工作並且不會破壞舊功能。

持續部署

持續部署或 CD 是一組技術,可快速向客戶交付新功能、錯誤修復和增強功能。 CD 包括自動化測試和自動化部署。通過使用持續部署,可以減少人工竊聽,並最小化反饋循環時間。基本上,開發人員越快從客戶那裡獲得反饋,產品就可以越早轉向,從而在競爭中獲得更多優勢。與 6 到 12 個月的發布週期相比,許多初創公司在一天內部署了多次,這對於企業和大公司來說仍然很典型。

最流行的 CD 解決方案之一是持續集成服務器 Jenkins。

持續部署方法的優點:減少反饋循環時間和人工開銷。

結對編程

結對編程是兩個開發人員在一台機器上一起工作的一種技術。其中一位開發者是司機,另一位是觀察者。司機編寫代碼,觀察者觀察、協助並提出建議。然後他們轉換角色。駕駛員具有專注於當前任務的更具戰術性的作用。相比之下,觀察者在監督“大局”以及改進代碼庫並使其更高效的方法方面更具戰略性。

結對編程的優點:

  • 將屬性與更短、更高效的代碼庫配對,並減少錯誤和缺陷。
  • 作為一個額外的好處,當程序員一起工作時,知識會隨著他們一起傳遞。但是,開發人員之間可能會發生衝突。

Node.js

Node.js 是一種事件驅動的異步 I/O 服務器端技術,用於構建可擴展且高效的 Web 服務器。 Node.js 由 Google 的 V8 JavaScript 引擎組成。

Node.js 的用途和使用類似於 Python 的 Twisted 和 Ruby 的 EventMachine。 Node 的 JavaScript 實現是繼嘗試使用 Ruby 和 C++ 編程語言之後的第三個實現。

Node.js 本身並不是像 Ruby on Rails 這樣的框架。它更類似於 PHP+Apache 對。以下是一些 Node.js 框架:Express、Meteor、Tower.js、Railsway JS、Geddy、Derby。

使用 NodeJS 的優點:

  • 由於 JavaScript 作為 Web 和移動應用程序開發的事實標準,開發人員很有可能熟悉 JavaScript。
  • 一種用於前端和後端開發的語言可加快編碼過程。開發人員的大腦不必在不同的語法之間切換。方法和類的學習速度更快。
  • 使用 NodeJS,您可以快速製作原型並儘早進入市場進行客戶開發和客戶獲取。與其他使用不太靈活的技術(例如 PHP 和 MySQL)的公司相比,這是一個重要的競爭優勢。
  • NodeJS 旨在通過利用 Web 套接字來支持實時應用程序。

有關更多信息,請訪問 Wikipedia、Nodejs.org 以及有關 ReadWrite 和 O'Reilly 的文章。

NoSQL 和 MongoDB

MongoDB,來自huMONGOus,是一個用於海量數據的高性能無關係數據庫。當傳統的關係型數據庫管理系統(RDBMS)無法應對海量數據的挑戰時,NoSQL 概念應運而生。

使用 MongoDB 的優勢:

  • 由於分佈式特性而可擴展:多個服務器和數據中心可能有冗餘數據。
  • 高性能:MongoDB 對於存儲和檢索數據非常有效,而不是元素之間的關係。
  • 鍵值存儲是原型設計的理想選擇,因為它不需要知道架構,也不需要固定的數據模型。

雲計算

計算包括:

  • 基礎設施即服務 (IaaS),例如 Rackspace、亞馬遜網絡服務;
  • 平台即服務 (PaaS),例如 Heroku、Windows Azure;
  • 軟件即服務 (SaaS),例如 Google Apps、Salesforce.com。

雲應用平台提供:

  • 可擴展性,例如,在幾分鐘內生成新實例;
  • 易於部署,例如,要推送到 Heroku,您只需使用 $ git push;
  • 即用即付計劃:根據需求添加或刪除內存和磁盤空間;
  • 通常不需要安裝和配置數據庫、應用服務器、包等;
  • 安全和支持。

PaaS 是原型設計、構建最小可行產品 (MVP) 和一般早期初創公司的理想選擇。

以下是最受歡迎的 PaaS 解決方案列表:

  • Heroku
  • Windows Azure
  • 節點柔術
  • 節點器

HTTP 請求和響應

每個 HTTP 請求和響應都由以下組件組成:

  1. Header:編碼、正文長度、來源、內容類型等信息;
  2. 正文:內容,通常是傳遞給服務器或發送回客戶端的參數或數據;

另外,HTTP Request 包含:

  • 方法:有幾種方法;最常見的是 GET、POST、PUT、DELETE。
  • 網址:主機、端口、路徑;
  • 查詢字符串,即 URL 中問號後的所有內容。

RESTful API

由於分佈式系統的需求,RESTful(REpresentational State Transfer)API 變得流行,其中每個事務都需要包含有關客戶端狀態的足夠信息。從某種意義上說,這個標準是無狀態的,因為沒有關於客戶端狀態的信息存儲在服務器上,因此每個請求都可以由不同的系統提供服務。

RESTful API 的顯著特點:

  • 由於可以將不同的組件獨立部署到不同的服務器,因此具有更好的可擴展性支持;
  • 由於更簡單的動詞和名詞結構而取代了簡單對象訪問協議 (SOAP);
  • 使用 HTTP 方法:GET、POST、DELETE、PUT、OPTIONS 等。

以下是用於消息收集的簡單創建、讀取、更新和刪除 (CRUD) REST API 示例:

方法 網址 意義
GET /messages.json 以JSON格式返回消息列表
PUT /messages.json 更新/替換所有消息並以 JSON 格式返回狀態/錯誤
POST /messages.json 創建新消息並以 JSON 格式返回其 id
GET /messages/{id}.json 以JSON格式返回id為{id}的消息
PUT /messages/{id}.json 用 id {id} 更新/替換消息,如果 {id} 消息不存在則創建它
刪除 /messages/{id}.json 刪除id為{id}的消息,返回JSON格式的狀態/錯誤

REST 不是協議;從某種意義上說,它是一種架構,它比作為一種協議的 SOAP 更靈活。因此,REST API URL 可能類似於 /messages/list.html/messages/list.xml 如果我們想支持這些格式。

PUT 和 DELETE 是冪等方法,也就是說如果服務器收到兩個或多個類似的請求,最終的結果是一樣的。

GET 是無效的,POST 不是冪等的,可能會影響狀態並導致副作用。

在 Wikipedia 上進一步閱讀 REST API 和 A Brief Introduction to REST 文章。


Tutorial JavaScript 教程
  1. 錯誤:找不到模塊 – webpack-dev-server.js

  2. 蓋茨比 - 窗口未定義錯誤,什麼以及如何修復它?

  3. 使用 HTML、CSS (Sass) 和 Javascript (jQuery) 構建帶有搜索功能的 Apple 風格導航欄

  4. 如何檢查對像數組中是否存在鍵

  5. 使用 Angular 10 和 Node JS (Express JS) 創建一個簡單的 CRUD 博客應用程序 (1 of 3)

  6. await Promise.all:不僅僅是異步函數

  7. 使用 WebRTC、Websocket、PHP +JS 從頭開始構建視頻會議應用程序 第 30 天

  1. 如何開始編程而不是嘗試失敗

  2. 哈巴狗指南

  3. 帶有嵌入式引導開關切換的傳單地圖

  4. Safari 雙重提交 ajax 調用

  5. ApexCharts 數據可視化

  6. 為什麼我切換到 PNPM?

  7. HTML Imports 的垮台就在我們身上(對我而言)

  1. 惡意腳本剖析:網站如何接管您的瀏覽器

  2. Sweet Pages:一個 jQuery 分頁解決方案

  3. 只是一個友好的提醒,React 並不是真的只是 JavaScript(不要嵌套函數式組件)

  4. 如何在 Angular 14 中單擊單選按鈕顯示隱藏 Div