亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Express 實戰(zhàn)(二):Node.js 基礎(chǔ)

soasme / 1474人閱讀

摘要:而通過實現(xiàn)名為的標準模塊,完美的解決了模塊導入問題。通常都被稱為包管理器,而這也是它最大的特色。例如,接受請求發(fā)送響應(yīng)。該模塊主要處理文件相關(guān)內(nèi)容,其中大多數(shù)都是文件讀寫功能。

在上一篇文章中,我們簡單的介紹了 Node.js 。了解到它基于 JavaScript、天生異步、擁有大量的第三方類庫。本文將會在之前的基礎(chǔ)上,對 Node.js 進行更深入的介紹。其中主要內(nèi)容包括:

Node 的安裝

如何使用第三方模塊生態(tài)

第三方模塊的安裝

一些簡單的使用示例

開發(fā)過程中的一些建議和技巧

在此之前,我假設(shè)你已經(jīng)掌握了 JavaScript 基礎(chǔ)知識并且熟悉一些基本的命令行操作。另外,不要臆想通過這一章就全面掌握 Node。但是如果你有心的話,可以去閱讀 Node.js 實戰(zhàn)。

安裝Node

JavaScript 世界的一大特點就是它選擇性非常多,Node 的安裝也不例外。

可以在官方下載頁面找到各種版本的源代碼和安裝包文件。建議你使用與自己操作系統(tǒng)對應(yīng)的安裝包進行安裝。當然,你也可用使用 apt-get、Homebrew 等包管理器進行安裝,如果你系統(tǒng)有的話。具體詳見官方的包管理工具的安裝指南。

如果你使用的是 Mac 或者 Linux 的話,那么我極力推薦你使用 NVM 來安裝。Window 系統(tǒng)上的對應(yīng)程序是 NVMW。這些版本管理工具,讓你可以在不同版本間進行自由切換。例如,你可以在嘗試新版本的特性時,同時在系統(tǒng)中保留一份穩(wěn)定版。另外,NVM 無需系統(tǒng)管理權(quán)限同時卸載也非常容易。而安裝過程也只需在終端執(zhí)行一行命令。

現(xiàn)在,請在你系統(tǒng)中安裝好 Node。

運行你的第一個Node腳本

安裝完成后,先動手寫個 "Hello World" 來檢驗一些。在新建的 helloworld.js 中加入一下代碼:

console.log("Hello, World!");

代碼中主要就是使用 console.log 來打印字符串 "Hello,world!",相信對于前端程序員來說并不會感到陌生。下面我們使用 node helloworld.js 運行代碼。如果一切正常的話,會出現(xiàn)如下輸出:

模塊的使用

在大多數(shù)編程語言中,我們都會對代碼進行拆分,然后在使用的時候?qū)⑦@些文件引入其中。例如,C 和 C++ 中的 include,Python 的 import ,Ruby 和 PHP 中的 require。而另外一些語言,如 C# 是在編譯時完成跨文件引用的。

很長一段時間內(nèi),JavaScript 官方并不支持模塊機制。所以社區(qū)中有人就編寫了 RequireJS 這種工具來解決依賴項導入的問題。但是,大多數(shù)時候還是通過

Node 的異步工作原理與此類似,例如,你通過瀏覽器請求 Node 服務(wù)器上的一張小貓圖片。因為該圖片資源太大,所以在進行磁盤讀寫的時候你可以抽身去處理其他事情。此時,這個磁盤就相當于一個外部資源,我們可以直接處理第二個請求而無需掛起等待費時操作結(jié)束。

Express 中主要有兩個外部資源:

涉及文件系統(tǒng)。例如,磁盤文件的讀寫。

涉及網(wǎng)絡(luò)處理。例如,接受請求、發(fā)送響應(yīng)。

在 Node 代碼中,這些異步都是通過回調(diào)進行處理的。其工作原理和在 Web 頁面發(fā)送 AJAX 請求一樣。在發(fā)送請求時你會附帶一個回調(diào)函數(shù),當請求處理完成后你的回調(diào)將會被執(zhí)行。

例如,現(xiàn)在你正在硬盤上讀取文件 myfile.txt 。當讀取結(jié)束后,你希望能夠打印出其中字母 X 出現(xiàn)的次數(shù),代碼如下:

var fs = require("fs");? 
?
var options = { encoding: "utf-8" };????????????????????? 
fs.readFile("myfile.txt", options, function(err, data) {? 
? if (err) {???? ???????????????????????????
??? console.error("Error reading file!");?? 
??? return;???????????????????????????????? 
? }????????????????????????????????????????
?
? console.log(data.match(/x/gi).length + " letter X"s");??
});

下面我們一步步解釋這些代碼:

首先,我們導入 Node 自帶的文件系統(tǒng)模塊。該模塊主要處理文件相關(guān)內(nèi)容,其中大多數(shù)都是文件讀寫功能。本例使用的其中的 readFile 方法。

接下來,我們需要設(shè)置 fs.readFile 方法中的參數(shù),第一個是文件名,第二個就是會回調(diào)函數(shù)。并且在讀取結(jié)束后執(zhí)行回調(diào)函數(shù)。

在 Node 中大多數(shù)回調(diào)函數(shù)都會設(shè)置錯誤信息 error 作為第一個參數(shù)。正常情況下該參數(shù)等于 null ,如果出現(xiàn)錯誤則該參數(shù)會保存錯誤信息。雖然有時候這些錯誤信息并不會導致程序終止執(zhí)行,但是多數(shù)情形下我們都需要對錯誤做出響應(yīng),例如,拋出異常并跳出回調(diào)函數(shù)。這也是 Node 中最常見的回調(diào)實踐。

最后,當一切正常時我們使用正則表達式匹配字母 X 并打印其數(shù)量。

下面我們就來做個測試。這里,我們在上面代碼的結(jié)束加上一段,那么會發(fā)生什么事情呢?

var fs = require("fs");? 
?
var options = { encoding: "utf-8" };????????????????????? 
fs.readFile("myfile.txt", options, function(err, data) {? 
? if (err) {???? ???????????????????????????
??? console.error("Error reading file!");?? 
??? return;???????????????????????????????? 
? }????????????????????????????????????????
?
? console.log(data.match(/x/gi).length + " letter X"s");??
});

console.log("Hello World!");

異步文件讀取時異步操作,所以這里先打印出來的是 " Hello world! ",然后才是異步函數(shù)中的打印操作。

這就是異步模式強大的地方。當一個外部設(shè)備在處理費時操作時,你可以繼續(xù)運行其他代碼。在 Web 應(yīng)用中這意味著相同的時間可以處理更多的請求。

注意:如果你想了解更多 JavaScript 異步的內(nèi)容的話,你可以去油管上查看這個視頻。視頻中的講解同時適用于 Node 和瀏覽器環(huán)境。

用 Node 構(gòu)建 Web 服務(wù):http 模塊

只有理解了上面那些概念,你才能更好的掌握 Node 內(nèi)置的 HTTP 模塊。而該模塊對 Express 框架來說又是最重要的模塊之一。Node 和 Express 能夠構(gòu)建 Web 服務(wù)正是依賴于這個模塊中的功能。

Node 的 HTTP 模塊有很多特性(比如,向其他服務(wù)器發(fā)送網(wǎng)絡(luò)請求),不過我們將要使用的是其中一個名為 http.createServer 的方法。該方法通過其回調(diào)函數(shù)來處理每一次的網(wǎng)絡(luò)請求,并且進行響應(yīng)。下面代碼中我們將所有的響應(yīng)都設(shè)置為了 "hello world" (可以保存到 myserver.js 中)。

var http = require("http");?????????? 
?
function requestHandler(request, response) {???????????? 
? console.log("In comes a request to: " + request.url);? 
? response.end("Hello, world!");???????????????????????? 
}?????????????????????????????? ?????????????????????????
?
var server = http.createServer(requestHandler);? 
server.listen(3000);? 

上面的代碼由 4 個部分構(gòu)成。

首先,我們引入 HTTP 模塊并將其保存到變量 http 中。這與之前 URL 模塊的操作一致。

接著,定義了一個請求處理函數(shù) requestHandler 。教程中的幾乎所有的代碼要么是請求處理函數(shù)要么是調(diào)用處理函數(shù)。該函數(shù)有兩個參數(shù),request 表示請求對象,而 response 則表示響應(yīng)對象。request 中包含 URL 路徑、user-agent 等信息。而通過調(diào)用 response 對象方法 Node 會將響應(yīng)信息打包好并發(fā)送給請求者。

余下的代碼則是指定內(nèi)置的 HTTP 服務(wù)在請求是執(zhí)行的處理函數(shù)以及服務(wù)監(jiān)聽的端口號。

對于 HTTPS 來說,我們則可以使用自帶的 HTTPS 模塊。除了需要配置 SSL 證書,其余的過程都一樣。如果你了解 HTTPS 的話那么后期從 HTTP 切換到 HTTPS 兩分鐘就能搞定。即使你不了解,也不必太過擔心。

如果你將代碼保存到 myserver.js 并執(zhí)行 node myserver.js 拉起服務(wù)。那么,此時你在瀏覽器中訪問 http://localhost:3000 ,你就會看到:

你可能也注意到了,每當你發(fā)起請求的時候終端控制臺都會打印一些信息。當你嘗試訪問不同 URL 時,雖然控制臺打印的信息不同但是得到的響應(yīng)卻都是 “Hello, world!”??刂婆_打印的信息類似于:

請注意上面打印的 URL 信息中并不包含 localhost:3000。雖然看起來顯得不那么直觀,但是反過來這也是對的。畢竟使用相對路徑,我們無需修改就能在任何電腦上部署 Node 應(yīng)用。

而 URL 解析的代碼大致如下:

function requestHandler(req, res) {
    if (req.url === "/") {
        res.end("Welcome to the homepage!");
    } else if (req.url === "/about") {
        res.end("Welcome to the about page!");
    } else {
        res.end("Error! File not found.");
    }
}

所有的請求 URL 都可以在這個函數(shù)里面完成處理。這樣做對于簡單的應(yīng)用來說確實非常簡單,但是當應(yīng)用規(guī)模變大之后該函數(shù)就會變的臃腫不利于維護。這也是 Express 框架出現(xiàn)的重要原因。

總結(jié)

本文主要內(nèi)容:

Node 的安裝

模塊系統(tǒng)的使用

package.json 文件的介紹

通過 package.json 安裝第三放模塊依賴項

Node 中的異步編程概念。

簡單 HTTP 服務(wù)應(yīng)用的創(chuàng)建。

原文地址

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

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/84827.html

相關(guān)文章

  • 大前端2018現(xiàn)在上車還還得及么

    摘要:面向?qū)ο笕筇卣骼^承性多態(tài)性封裝性接口。第五階段封裝一個屬于自己的框架框架封裝基礎(chǔ)事件流冒泡捕獲事件對象事件框架選擇框架。核心模塊和對象全局對象,,,事件驅(qū)動,事件發(fā)射器加密解密,路徑操作,序列化和反序列化文件流操作服務(wù)端與客戶端。 第一階段: HTML+CSS:HTML進階、CSS進階、div+css布局、HTML+css整站開發(fā)、 JavaScript基礎(chǔ):Js基礎(chǔ)教程、js內(nèi)置對...

    stormgens 評論0 收藏0
  • 大前端2018現(xiàn)在上車還還得及么

    摘要:面向?qū)ο笕筇卣骼^承性多態(tài)性封裝性接口。第五階段封裝一個屬于自己的框架框架封裝基礎(chǔ)事件流冒泡捕獲事件對象事件框架選擇框架。核心模塊和對象全局對象,,,事件驅(qū)動,事件發(fā)射器加密解密,路徑操作,序列化和反序列化文件流操作服務(wù)端與客戶端。 第一階段: HTML+CSS:HTML進階、CSS進階、div+css布局、HTML+css整站開發(fā)、 JavaScript基礎(chǔ):Js基礎(chǔ)教程、js內(nèi)置對...

    mylxsw 評論0 收藏0
  • NodeJs+Express+Mysql + Vuejs 項目實戰(zhàn) - 大綱

    摘要:多一個技能多一條出路,祝你在自學道路上越走越好,掌握自己的核心技能,不只是優(yōu)秀,還要成為不可替代的人 NodeJs+Express+Mysql + Vuejs 項目實戰(zhàn) 最近準備寫一系列文章,全面講述如何基于NodeJs + Express + Mysql + Vuejs 從零開發(fā)前后端完全分離項目; 文筆及技術(shù)可能在某些方面欠佳,請您指正,共同學習進步 前端:Vuejs全家桶 后端:...

    noONE 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<