Node.js:構建高性能實時Web應用的現代框架
Node.js是現代Web開發中一個重要的框架,它簡化了高性能、實時Web應用程序的創建過程。 Node.js允許JavaScript在服務器端和客戶端端到端使用。本教程將引導您完成Node.js的安裝,並演示如何編寫第一個“Hello World”程序。最終,您將學習如何使用Node.js和Express構建一個天氣API。
Node.js是什麼?
傳統上,JavaScript只能在Web瀏覽器中運行,但由於人們對將其引入服務器端的興趣日益濃厚,Node.js應運而生。
Node.js與其他服務器技術略有不同,因為它基於事件而非基於線程。用於服務PHP和其他CGI腳本的Apache等Web服務器是基於線程的,因為它們為每個傳入請求生成一個系統線程。雖然這對於許多應用程序來說足夠了,但基於線程的模型在處理許多長期連接(例如,服務實時應用程序(如即時消息應用程序)所需的連接)時擴展性不佳。
“Node.js中的每個I/O操作都是異步的……”
Node.js使用事件循環而不是線程,能夠擴展到數百萬個並發連接。它利用了服務器大部分時間都在等待I/O操作(例如,從硬盤讀取文件、訪問外部Web服務或等待文件上傳完成)這一事實,因為這些操作比內存操作慢得多。 Node.js中的每個I/O操作都是異步的,這意味著服務器可以在I/O操作進行時繼續處理傳入請求。 JavaScript非常適合基於事件的編程,因為它具有匿名函數和閉包,這使得定義內聯回調變得輕而易舉,而且JavaScript開發人員已經知道如何以這種方式進行編程。這種基於事件的模型使Node.js非常快速,並且使實時應用程序的擴展非常容易。
安裝
Node.js官方支持Linux、macOS、Microsoft Windows、SmartOS和FreeBSD。要在Windows(v16及更高版本)上安裝最新版本的Node.js,您的計算機必須運行Windows 8.1、10或11。
Node.js內置了自己的包管理器,稱為節點包管理器(簡稱npm),它允許您從npm註冊表安裝第三方模塊。
- 從nodejs.org下載最新版本的Node.js(撰寫本文時最新版本為17.9.0,最新LTS版本為16.14.2)。這應該會在您的計算機上下載.msi文件。
- 運行該文件並完成安裝嚮導。大多數選項都是可選的——除非您有充分的理由,否則無需更改程序路徑。您可以選擇安裝Chocolatey(一個Windows包管理器)或跳過此步驟。
- 安裝嚮導完成後並且Node.js成功安裝後,打開終端並運行
npm -v
以查看npm版本。
此外,如果您在程序中搜索Node ,您應該會找到Node.js命令提示符。
命令提示符提供了一個REPL(讀取-評估-打印循環),您可以在其中鍵入JavaScript Node.js代碼,並立即評估代碼並輸出結果。您還可以將JavaScript從外部文件加載到REPL會話中等等。
Hello World!
學習任何新技術都始於“Hello World!”教程,因此我們將創建一個簡單的HTTP服務器來提供該消息。
首先,我們將創建一個新的Node.js項目。為此,請打開您的終端,切換到您希望項目所在的目錄,然後運行以下命令:
npm init
系統會提示您提供有關庫的一些信息,包括庫名稱、作者、入口文件、許可證和版本,完成後,將使用提供的信息創建一個package.json文件。要跳過此步驟,請附加require
函數,如下所示(在test.js內部):
var util = require("util");
這將加載util
模塊,該模塊包含用於處理系統級任務(例如將輸出打印到終端)的實用程序函數。要在模塊中使用函數,請在存儲模塊的變量上調用它——在本例中,使用文件名作為參數的node命令。
node test.js
運行此命令將在命令行輸出“Hello World!”。
要創建HTTP服務器,您必須使用http
模塊。
var util = require("util"); var http = require("http"); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/html'}); res.write('Hello World!'); res.end(); }).listen(8080); util.log("Server running at https://localhost:8080/");
此腳本導入http
模塊並創建一個HTTP服務器。傳遞給http.createServer()
的匿名函數會在接收到請求時執行。在瀏覽器中訪問http://localhost:8080/
,您將看到Hello World! 。
3. 一個簡單的靜態文件服務器
好的,我們已經構建了一個HTTP服務器,但是無論您訪問哪個URL,它除了“Hello World”之外什麼也不會發送。任何HTTP服務器都必須能夠發送靜態文件,例如HTML文件、圖像和其他文件。以下代碼就是這樣做的:
var util = require("util"), http = require("http"), url = require("url"), path = require("path"), fs = require("fs"); http.createServer(function(request, response) { var uri = path.parse(request.url).base; var filename = path.join(process.cwd(), uri); fs.access(filename, fs.constants.F_OK, function(err) { if(err) { response.writeHead(404, {"Content-Type": "text/plain"}); response.write("404 Not Found\n"); response.end(); return; } fs.readFile(filename, "binary", function(err, file) { if(err) { response.writeHead(500, {"Content-Type": "text/plain"}); response.write(err "\n"); response.end(); return; } response.writeHead(200); response.write(file, "binary"); response.end(); }); }); }).listen(8080); util.log("Server running at http://localhost:8080/");
我們首先需要在代碼中使用所有模塊。這包括http
、 path
和url
模塊,用於解析請求的傳入URL並找到被訪問文件的路徑名。我們使用process.cwd()
(或當前工作目錄)和請求文件的路徑來查找服務器硬盤上的實際文件名。
接下來,我們檢查文件是否存在,這是一個異步操作,因此需要回調函數。如果文件不存在,則向用戶發送404 Not Found消息,並且函數返回。否則,我們使用fs.readFile()
讀取文件。如果在瀏覽器中訪問http://localhost:8080/path/to/file
,則該文件將顯示在您的瀏覽器中。
4. 使用Express在Node.js中構建天氣API
在我們的靜態文件服務器的基礎上,我們將構建一個Node.js服務器,該服務器獲取並顯示給定城市的預期天氣狀況。首先,在這個示例中,我們將需要兩個額外的第三方模塊: axios
模塊和express
模塊。 Express是一個用於在Node.js應用程序中構建RESTful API的Web框架。我們將使用Express模塊構建一個單一的API端點,該端點將從每個請求中獲取城市,並使用包含該城市預報天氣狀況的HTML正文進行響應。天氣信息將來自外部API——因此我們將使用axios
客戶端發出API請求。
首先,我們將同時使用以下命令安裝express
和axios
模塊:
npm i express axios
這將從npm註冊表安裝這兩個模塊。用以下代碼替換app.get()
代碼:
app.get('/', (req, res) => { let city = req.query.city; axios.get(`https://api.openweathermap.org/data/2.5/forecast?q=${city}&appid=${apikey}`) .then((response) => { if(response.status === 200) { res.send(`The weather in your city "${city}" is<br> ${response.data.list[0].weather[0].description}`) } }) .catch((err) => { console.log(err); }) })
我們首先從query
屬性中檢索查詢字符串(city)。
然後,我們使用axios
向天氣預報API發出GET請求。 URL將需要兩個變量:我們要獲取預報的city和在Open Weather API信息中心提供的唯一API密鑰。
我們設置了一個res.send()
方法。發生錯誤時,我們只需通過在命令行上運行node test.js
並將以下URL鍵入瀏覽器中,即可將錯誤數據記錄到控制台:
<code>http://localhost:3000/?city=nairobi</code>
請注意, nairobi可以替換為您選擇的任何城市。以下是您應該獲得的結果。
後續步驟
Node.js是一項非常令人興奮的技術,它簡化了高性能實時應用程序的創建過程。我希望您能夠看到它的好處,並能夠在您自己的某些應用程序中使用它。由於Node.js具有強大的模塊系統,因此很容易在您的應用程序中使用開源第三方庫,並且幾乎所有內容都有可用的模塊:包括數據庫連接層、模板引擎、郵件客戶端,甚至連接所有這些內容的完整框架。
祝您Node.js編程愉快!
此文章已更新,並包含Kingsley Ubah的貢獻。 Kingsley熱衷於創作教育和啟發讀者的內容。愛好包括閱讀、足球和騎自行車。
以上是使用node.js學習服務器端JavaScript的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JavaScript核心數據類型在瀏覽器和Node.js中一致,但處理方式和額外類型有所不同。 1)全局對像在瀏覽器中為window,在Node.js中為global。 2)Node.js獨有Buffer對象,用於處理二進制數據。 3)性能和時間處理在兩者間也有差異,需根據環境調整代碼。

JavaScriptusestwotypesofcomments:single-line(//)andmulti-line(//).1)Use//forquicknotesorsingle-lineexplanations.2)Use//forlongerexplanationsorcommentingoutblocksofcode.Commentsshouldexplainthe'why',notthe'what',andbeplacedabovetherelevantcodeforclari

Python和JavaScript的主要區別在於類型系統和應用場景。 1.Python使用動態類型,適合科學計算和數據分析。 2.JavaScript採用弱類型,廣泛用於前端和全棧開發。兩者在異步編程和性能優化上各有優勢,選擇時應根據項目需求決定。

選擇Python還是JavaScript取決於項目類型:1)數據科學和自動化任務選擇Python;2)前端和全棧開發選擇JavaScript。 Python因其在數據處理和自動化方面的強大庫而備受青睞,而JavaScript則因其在網頁交互和全棧開發中的優勢而不可或缺。

Python和JavaScript各有優勢,選擇取決於項目需求和個人偏好。 1.Python易學,語法簡潔,適用於數據科學和後端開發,但執行速度較慢。 2.JavaScript在前端開發中無處不在,異步編程能力強,Node.js使其適用於全棧開發,但語法可能複雜且易出錯。

javascriptisnotbuiltoncorc; sanInterpretedlanguagethatrunsonenginesoftenwritteninc.1)JavascriptwasdesignedAsignedAsalightWeight,drackendedlanguageforwebbrowsers.2)Enginesevolvedfromsimpleterterpretpretpretpretpreterterpretpretpretpretpretpretpretpretpretcompilerers,典型地,替代品。

JavaScript可用於前端和後端開發。前端通過DOM操作增強用戶體驗,後端通過Node.js處理服務器任務。 1.前端示例:改變網頁文本內容。 2.後端示例:創建Node.js服務器。

選擇Python還是JavaScript應基於職業發展、學習曲線和生態系統:1)職業發展:Python適合數據科學和後端開發,JavaScript適合前端和全棧開發。 2)學習曲線:Python語法簡潔,適合初學者;JavaScript語法靈活。 3)生態系統:Python有豐富的科學計算庫,JavaScript有強大的前端框架。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

SublimeText3漢化版
中文版,非常好用