首頁 >web前端 >js教程 >使用node.js學習服務器端JavaScript

使用node.js學習服務器端JavaScript

Lisa Kudrow
Lisa Kudrow原創
2025-03-13 10:35:10444瀏覽

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非常快速,並且使實時應用程序的擴展非常容易。

  1. 安裝

Node.js官方支持Linux、macOS、Microsoft Windows、SmartOS和FreeBSD。要在Windows(v16及更高版本)上安裝最新版本的Node.js,您的計算機必須運行Windows 8.1、10或11。

Node.js內置了自己的包管理器,稱為節點包管理器(簡稱npm),它允許您從npm註冊表安裝第三方模塊。

  1. 從nodejs.org下載最新版本的Node.js(撰寫本文時最新版本為17.9.0,最新LTS版本為16.14.2)。這應該會在您的計算機上下載.msi文件。
  2. 運行該文件並完成安裝嚮導。大多數選項都是可選的——除非您有充分的理由,否則無需更改程序路徑。您可以選擇安裝Chocolatey(一個Windows包管理器)或跳過此步驟。
  3. 安裝嚮導完成後並且Node.js成功安裝後,打開終端並運行npm -v以查看npm版本。

此外,如果您在程序中搜索Node ,您應該會找到Node.js命令提示符。

Learning Server-Side JavaScript With Node.jsLearning Server-Side JavaScript With Node.jsLearning Server-Side JavaScript With Node.jsLearning Server-Side JavaScript With Node.js命令提示符提供了一個REPL(讀取-評估-打印循環),您可以在其中鍵入JavaScript Node.js代碼,並立即評估代碼並輸出結果。您還可以將JavaScript從外部文件加載到REPL會話中等等。

  1. 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!

Learning Server-Side JavaScript With Node.js 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/");

我們首先需要在代碼中使用所有模塊。這包括httppathurl模塊,用於解析請求的傳入URL並找到被訪問文件的路徑名。我們使用process.cwd() (或當前工作目錄)和請求文件的路徑來查找服務器硬盤上的實際文件名。

接下來,我們檢查文件是否存在,這是一個異步操作,因此需要回調函數。如果文件不存在,則向用戶發送404 Not Found消息,並且函數返回。否則,我們使用fs.readFile()讀取文件。如果在瀏覽器中訪問http://localhost:8080/path/to/file ,則該文件將顯示在您的瀏覽器中。

Learning Server-Side JavaScript With Node.js 4. 使用Express在Node.js中構建天氣API

在我們的靜態文件服務器的基礎上,我們將構建一個Node.js服務器,該服務器獲取並顯示給定城市的預期天氣狀況。首先,在這個示例中,我們將需要兩個額外的第三方模塊: axios模塊和express模塊。 Express是一個用於在Node.js應用程序中構建RESTful API的Web框架。我們將使用Express模塊構建一個單一的API端點,該端點將從每個請求中獲取城市,並使用包含該城市預報天氣狀況的HTML正文進行響應。天氣信息將來自外部API——因此我們將使用axios客戶端發出API請求。

首先,我們將同時使用以下命令安裝expressaxios模塊:

 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可以替換為您選擇的任何城市。以下是您應該獲得的結果。

Learning Server-Side JavaScript With Node.js後續步驟

Node.js是一項非常令人興奮的技術,它簡化了高性能實時應用程序的創建過程。我希望您能夠看到它的好處,並能夠在您自己的某些應用程序中使用它。由於Node.js具有強大的模塊系統,因此很容易在您的應用程序中使用開源第三方庫,並且幾乎所有內容都有可用的模塊:包括數據庫連接層、模板引擎、郵件客戶端,甚至連接所有這些內容的完整框架。

祝您Node.js編程愉快!

此文章已更新,並包含Kingsley Ubah的貢獻。 Kingsley熱衷於創作教育和啟發讀者的內容。愛好包括閱讀、足球和騎自行車。

以上是使用node.js學習服務器端JavaScript的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn