国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
簡介
異步編程
全程掌控
全局作用域
安裝
Hello World 應(yīng)用
HTTP 服務(wù)器
處理 URL 參數(shù)
讀取和寫入文件
訪問 MySQL 數(shù)據(jù)庫
結(jié)論
首頁 web前端 js教程 node.js初學(xué)者

node.js初學(xué)者

Mar 14, 2025 am 10:33 AM

Node.js for Beginners

Node.js 的事件驅(qū)動(dòng)編程對(duì)于新手來說可能比較棘手,但這并不意味著難以入門。本文將介紹 Node.js 的基礎(chǔ)知識(shí),并解釋其流行的原因。

簡介

要開始使用 Node.js,首先必須了解 Node.js 與傳統(tǒng)服務(wù)器端腳本環(huán)境(如 PHP、Python 或 Ruby)的區(qū)別。

異步編程

您很可能熟悉異步編程;畢竟,它是 AJAX 中的“A”。Node 中的每個(gè)函數(shù)都是異步的。因此,所有通常會(huì)阻塞線程的操作都使用 Promise 在后臺(tái)執(zhí)行。這是關(guān)于 Node 最重要的一點(diǎn)。例如,如果您正在讀取文件系統(tǒng)上的文件,則將使用異步函數(shù)。

如果您使用的是某些版本的 Node 函數(shù),則使用回調(diào)函數(shù),這些函數(shù)是在 Promise 出現(xiàn)之前設(shè)計(jì)的?,F(xiàn)在大多數(shù) Node 函數(shù)都有 Promise 等效項(xiàng),因此最好將此處使用的回調(diào)函數(shù)轉(zhuǎn)換為基于 Promise 的等效項(xiàng),并比較語法。

全程掌控

使用 Node,您必須自己完成很多工作。例如,HTTP 模塊非常精簡且不拘泥于特定風(fēng)格。這對(duì)新手來說可能令人不知所措,但好處是能夠構(gòu)建高性能的 Web 應(yīng)用(盡管 JavaScript 的性能很大程度上歸功于 V8 優(yōu)化的引擎)。一個(gè)腳本處理與所有客戶端的所有通信。這大大減少了應(yīng)用程序使用的資源數(shù)量。例如,這是一個(gè)簡單的 Node.js 應(yīng)用程序代碼:

const i, a, b, c, max;
max = 1000000000;
var d = Date.now();
for (i = 0; i 
<p>以下是使用 PHP 編寫的等效代碼:</p>
<pre class="brush:php;toolbar:false">$a = null;
$b = null;
$c = null;
$i = null;
$max = 1000000000;

$start = microtime(true);

for ($i = 0; $i 
<p>現(xiàn)在讓我們看看基準(zhǔn)測(cè)試數(shù)據(jù)。下表列出了這兩個(gè)簡單應(yīng)用程序的響應(yīng)時(shí)間(以毫秒為單位):</p>
<pre class="brush:php;toolbar:false">const http = require('http');

http 變量。

在上面的代碼中,我們將模塊的名稱傳遞給 exports 對(duì)象,并使用要公開的代碼片段填充其屬性和方法??紤]以下模塊示例:

exports.area = function (r) {
  return Math.PI * r ** 2;
};

exports.circumference = function (r) {
  return 2 * Math.PI * r;
};

此代碼創(chuàng)建了一個(gè) exports 對(duì)象。這些函數(shù)可以在模塊外部訪問,因?yàn)樗鼈兪窃?PI 上定義的,完全受到保護(hù),免受外部干擾。因此,您可以放心,circumference() 將始終按預(yù)期工作(只要為 import 關(guān)鍵字提供值):

// file
import myModule from "./myModule.js"
// Node 內(nèi)置/包
import http from "http"

在瀏覽器中,ESM 只能使用相對(duì)文件路徑進(jìn)行搜索,如上所示。但是,在 Node 中,您可以傳遞沒有 node: 前綴的路徑。

但是,以前的方法僅適用于默認(rèn)導(dǎo)出。如果您使用的是命名導(dǎo)出(稍后將詳細(xì)介紹),則需要使用稍微不同的語法。

import { exportOne, exportTwo } from "./myModule.js"

要導(dǎo)出內(nèi)容,請(qǐng)使用 export default 關(guān)鍵字。export 用于命名導(dǎo)出,export default 用于默認(rèn)導(dǎo)出。命名導(dǎo)出允許您導(dǎo)出不同的內(nèi)容,并且僅使用其中一個(gè)在不同的模塊中使用上面的 import 語法。如果您只導(dǎo)出一個(gè)內(nèi)容,則默認(rèn)導(dǎo)出會(huì)更容易。

// 命名導(dǎo)出
export function exportOne() {
    ...
}
export function exportTwo() {
    ...
}
// 默認(rèn)導(dǎo)出
export default function defaultFunction() {
    ...
}

在本教程的其余部分,我們將使用 ESM。

全局作用域

Node 是在 Google 的 V8 JavaScript 引擎中運(yùn)行的 JavaScript 環(huán)境。因此,我們應(yīng)該遵循我們?cè)诳蛻舳碎_發(fā)中使用的最佳實(shí)踐。例如,我們應(yīng)該避免將任何內(nèi)容放入全局作用域。但是,這并非總是可能的。Node 中的全局作用域是(在瀏覽器中為 window),您可以通過在聲明變量時(shí)省略 var 來輕松創(chuàng)建函數(shù)的全局變量。

安裝

自然地,我們需要在編寫和執(zhí)行應(yīng)用程序之前安裝 Node。如果您使用的是 Windows 或 macOS,安裝非常簡單;nodejs.org 網(wǎng)站提供了這些操作系統(tǒng)的安裝程序。對(duì)于 Linux,請(qǐng)使用任何包管理器。例如,如果您使用的是支持 apt 的發(fā)行版,請(qǐng)打開終端并鍵入:

sudo apt-get update
sudo apt-get install node

或:

sudo aptitude update
sudo aptitude install node

Node.js 位于 sid 存儲(chǔ)庫中;您可能需要將它們添加到您的源列表中:

sudo echo deb https://ftp.us.debian.org/debian/ sid main > /etc/apt/sources.list.d/sid.list

但請(qǐng)注意,在較舊的系統(tǒng)上安裝 sid 包可能會(huì)破壞您的系統(tǒng)。請(qǐng)小心,并刪除 module_name。

Hello World 應(yīng)用

當(dāng)然,我們的第一個(gè) Node.js 腳本將打印在控制臺(tái)中顯示的文本“Hello World!”。

HTTP 服務(wù)器

讓我們繼續(xù)一個(gè)更高級(jí)的應(yīng)用程序;它并不像您想象的那么復(fù)雜。讓我們從以下代碼開始。閱讀注釋,然后閱讀下面的解釋:

// 包含 http 模塊。
import { createServer } from "http"

// 創(chuàng)建服務(wù)器。作為參數(shù)傳遞的函數(shù)在每次發(fā)出請(qǐng)求時(shí)都會(huì)被調(diào)用。
// request 變量保存所有請(qǐng)求參數(shù)
// response 變量允許您對(duì)發(fā)送到客戶端的響應(yīng)執(zhí)行任何操作。
createServer(function (request, response) {
    // 在 end 事件上附加偵聽器。
    // 當(dāng)客戶端發(fā)送所有數(shù)據(jù)并等待響應(yīng)時(shí),將調(diào)用此事件。
    request.on("end", function () {
        // 將標(biāo)頭寫入響應(yīng)。
        // 200 是 HTTP 狀態(tài)代碼(此代碼表示成功)
        // 第二個(gè)參數(shù)在對(duì)象中保存標(biāo)頭字段
        // 我們正在發(fā)送純文本,因此 Content-Type 應(yīng)為 text/plain
        response.writeHead(200, {
            'Content-Type': 'text/plain'
        });
        // 發(fā)送數(shù)據(jù)并結(jié)束響應(yīng)。
        response.end('Hello HTTP!');
    });
// 偵聽 8080 端口。
}).listen(8080);

這段代碼非常簡單。您可以通過使用 response.end() 向客戶端發(fā)送更多數(shù)據(jù)。將此代碼保存為 http.js,然后在控制臺(tái)中鍵入以下命令:

node http.js

打開瀏覽器并導(dǎo)航到 http://m.miracleart.cn/link/7232a90ea7d391905f9ee07bcc7c5967。您應(yīng)該在頁面上看到文本 Hello HTTP!

處理 URL 參數(shù)

如前所述,我們必須自己完成 Node 中的所有工作,包括解析請(qǐng)求參數(shù)。但是,這相當(dāng)簡單。看看下面的代碼:

// 包含 createServer
import { createServer} from "http"
// 和 url 模塊,它在解析請(qǐng)求參數(shù)方面非常有用。
url = require("url");

// 創(chuàng)建服務(wù)器。
createServer(function (request, response) {
    // 在 end 事件上附加偵聽器。
    request.on('end', function () {
        // 解析請(qǐng)求參數(shù)并將它們存儲(chǔ)在 _get 變量中。
        // 此函數(shù)解析來自請(qǐng)求的 url 并返回對(duì)象表示。
        var _get = url.parse(request.url, true).query;
        // 將標(biāo)頭寫入響應(yīng)。
        response.writeHead(200, {
            'Content-Type': 'text/plain'
        });
        // 發(fā)送數(shù)據(jù)并結(jié)束響應(yīng)。
        response.end('Here is your data: '   _get['data']);
    });
// 偵聽 8080 端口。
}).listen(8080);

此代碼使用 query 屬性,該屬性檢索 URL 的參數(shù)。將此文件保存為 get.js 并使用以下命令執(zhí)行它:

node get.js

然后,導(dǎo)航到 data 參數(shù)不會(huì)中斷腳本。

讀取和寫入文件

要管理 Node 中的文件,我們使用 fs 模塊(核心模塊)。我們分別使用 fs.writeFile() 方法讀取和寫入文件。我將在以下代碼之后解釋參數(shù):

// 包含 createServer,
import { createServer } from "http"
// 和 fs 函數(shù)
import { readFile, writeFile } from "fs"

// 創(chuàng)建 http 服務(wù)器。
createServer(function (request, response) {
    // 在 end 事件上附加偵聽器。
    request.on("end", function () {
        // 讀取文件。
        readFile("test.txt", 'utf-8', function (error, data) {
            // 寫入標(biāo)頭。
            response.writeHead(200, {
                'Content-Type': 'text/plain'
            });
            // 將從文件中獲得的數(shù)字遞增。
            data = parseInt(data)   1;
            // 將遞增的數(shù)字寫入文件。
            writeFile('test.txt', data);
            // 使用一些不錯(cuò)的消息結(jié)束響應(yīng)。
            response.end('This page was refreshed '   data   ' times!');
        });
    });
// 偵聽 8080 端口。
}).listen(8080);

將此保存為 files.js。在運(yùn)行此腳本之前,在與 files.js 相同的目錄中創(chuàng)建一個(gè)名為 test.txt 的文件。

此代碼演示了 fs.writeFile() 方法。每次服務(wù)器收到請(qǐng)求時(shí),腳本都會(huì)從文件中讀取一個(gè)數(shù)字,遞增該數(shù)字,并將新數(shù)字寫入文件。fs.writeFile() 方法接受文件名和數(shù)據(jù)作為參數(shù)。它還接受第三個(gè)和第四個(gè)參數(shù)(兩者都是可選的),分別指定編碼和回調(diào)函數(shù)。

現(xiàn)在,讓我們使用以下命令運(yùn)行此腳本:

node files.js

在瀏覽器中以 http://m.miracleart.cn/link/7232a90ea7d391905f9ee07bcc7c5967 打開它并刷新幾次。現(xiàn)在,您可能會(huì)認(rèn)為代碼中存在錯(cuò)誤,因?yàn)樗坪踹f增了兩次。這不是錯(cuò)誤。每次請(qǐng)求此 URL 時(shí),都會(huì)向服務(wù)器發(fā)送兩個(gè)請(qǐng)求。第一個(gè)請(qǐng)求是由瀏覽器自動(dòng)發(fā)出的,它請(qǐng)求 favicon.ico,當(dāng)然,第二個(gè)請(qǐng)求是針對(duì) URL(http://m.miracleart.cn/link/7232a90ea7d391905f9ee07bcc7c5967)。

即使此行為在技術(shù)上不是錯(cuò)誤,但它也不是我們想要的行為。我們可以通過檢查請(qǐng)求 URL 來輕松修復(fù)此問題。以下是修改后的代碼:

// 包含 createServer,
import { createServer } from "http"
// 和 fs 函數(shù)
import { readFile, writeFile } from "fs"

// 創(chuàng)建 http 服務(wù)器。
createServer(function (request, response) {
    // 在 end 事件上附加偵聽器。
    request.on('end', function () {
        // 檢查用戶是否請(qǐng)求 /
        if (request.url == '/') {
            // 讀取文件。
            readFile('test.txt', 'utf-8', function (error, data) {
                // 寫入標(biāo)頭。
                response.writeHead(200, {
                    'Content-Type': 'text/plain'
                });
                // 將從文件中獲得的數(shù)字遞增。
                data = parseInt(data)   1;
                // 將遞增的數(shù)字寫入文件。
                writeFile('test.txt', data);
                // 使用一些不錯(cuò)的消息結(jié)束響應(yīng)。
                response.end('This page was refreshed '   data   ' times!');
            });
        } else {
            // 指示未找到請(qǐng)求的文件。
            response.writeHead(404);
            // 并在不發(fā)送任何數(shù)據(jù)的情況下結(jié)束請(qǐng)求。
            response.end();
        }
    });
// 偵聽 8080 端口。
}).listen(8080);

現(xiàn)在測(cè)試它;它應(yīng)該按預(yù)期工作。

訪問 MySQL 數(shù)據(jù)庫

大多數(shù)傳統(tǒng)的服務(wù)器端技術(shù)都具有連接到數(shù)據(jù)庫并查詢數(shù)據(jù)庫的內(nèi)置方法。使用 Node.js,您必須安裝一個(gè)庫。在本教程中,我選擇了穩(wěn)定且易于使用的 node-mysql。此模塊的全名是 mysql@2.0.0-alpha2(@ 之后的所有內(nèi)容都是版本號(hào))。打開控制臺(tái),導(dǎo)航到您已存儲(chǔ)腳本的目錄,然后執(zhí)行以下命令:

npm install mysql

這將下載并安裝模塊,它還會(huì)在當(dāng)前目錄中創(chuàng)建 node_modules 文件夾?,F(xiàn)在讓我們看看如何在代碼中使用它;請(qǐng)參見以下示例:

// 包含 http 模塊,
import { createServer } from "http"
// 和您剛剛安裝的 mysql 模塊。
import * as mysql from "mysql"

// 創(chuàng)建連接。
// 數(shù)據(jù)默認(rèn)為新的 mysql 安裝,應(yīng)根據(jù)您的配置進(jìn)行更改。
const connection = mysql.createConnection({
    user: "root",
    password: "",
    database: "db_name"
});

// 創(chuàng)建 http 服務(wù)器。
createServer(function (request, response) {
    // 在 end 事件上附加偵聽器。
    request.on('end', function () {
        // 查詢數(shù)據(jù)庫。
        connection.query('SELECT * FROM your_table;', function (error, rows, fields) {
            response.writeHead(200, {
                'Content-Type': 'x-application/json'
            });
            // 將數(shù)據(jù)作為 JSON 字符串發(fā)送。
            // Rows 變量保存查詢的結(jié)果。
            response.end(JSON.stringify(rows));
        });
    });
// 偵聽 8080 端口。
}).listen(8080);

使用此庫查詢數(shù)據(jù)庫很容易;只需輸入查詢字符串和回調(diào)函數(shù)即可。在實(shí)際應(yīng)用程序中,您應(yīng)該檢查是否存在錯(cuò)誤(如果發(fā)生錯(cuò)誤則為 undefined)并根據(jù)查詢的成功或失敗發(fā)送響應(yīng)代碼。另請(qǐng)注意,我們已設(shè)置 x-application/json,這是 JSON 的有效 MIME 類型。使用 JSON.stringify() 方法將 rows 轉(zhuǎn)換為 JSON 結(jié)構(gòu)。

將此文件保存為 mysql.js,然后執(zhí)行它(如果您已安裝 MySQL):

node mysql.js

在瀏覽器中導(dǎo)航到 http://m.miracleart.cn/link/7232a90ea7d391905f9ee07bcc7c5967,您應(yīng)該會(huì)收到下載 JSON 格式文件的提示。

結(jié)論

Node.js 需要額外的工作,但快速而強(qiáng)大的應(yīng)用程序的回報(bào)是值得的。如果您不想在最低級(jí)別上完成所有工作,您可以隨時(shí)選擇一個(gè)框架(例如 Express)來簡化應(yīng)用程序的開發(fā)。

Node.js 是一項(xiàng)很有前景的技術(shù),也是高負(fù)載應(yīng)用程序的絕佳選擇。微軟、eBay 和雅虎等公司已經(jīng)證明了這一點(diǎn)。如果您不確定托管您的網(wǎng)站或應(yīng)用程序,您可以隨時(shí)使用廉價(jià)的 VPS 解決方案或各種基于云的服務(wù),例如 Microsoft Azure 和 Amazon EC2。這兩種服務(wù)都以合理的價(jià)格提供可擴(kuò)展的環(huán)境。

以上是node.js初學(xué)者的詳細(xì)內(nèi)容。更多信息請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

Java vs. JavaScript:清除混亂 Java vs. JavaScript:清除混亂 Jun 20, 2025 am 12:27 AM

Java和JavaScript是不同的編程語言,各自適用于不同的應(yīng)用場(chǎng)景。Java用于大型企業(yè)和移動(dòng)應(yīng)用開發(fā),而JavaScript主要用于網(wǎng)頁開發(fā)。

如何在JS中與日期和時(shí)間合作? 如何在JS中與日期和時(shí)間合作? Jul 01, 2025 am 01:27 AM

JavaScript中的日期和時(shí)間處理需注意以下幾點(diǎn):1.創(chuàng)建Date對(duì)象有多種方式,推薦使用ISO格式字符串以保證兼容性;2.獲取和設(shè)置時(shí)間信息可用get和set方法,注意月份從0開始;3.手動(dòng)格式化日期需拼接字符串,也可使用第三方庫;4.處理時(shí)區(qū)問題建議使用支持時(shí)區(qū)的庫,如Luxon。掌握這些要點(diǎn)能有效避免常見錯(cuò)誤。

為什么要將標(biāo)簽放在的底部? 為什么要將標(biāo)簽放在的底部? Jul 02, 2025 am 01:22 AM

PlacingtagsatthebottomofablogpostorwebpageservespracticalpurposesforSEO,userexperience,anddesign.1.IthelpswithSEObyallowingsearchenginestoaccesskeyword-relevanttagswithoutclutteringthemaincontent.2.Itimprovesuserexperiencebykeepingthefocusonthearticl

JavaScript與Java:開發(fā)人員的全面比較 JavaScript與Java:開發(fā)人員的全面比較 Jun 20, 2025 am 12:21 AM

JavaScriptIspreferredforredforwebdevelverment,而Javaisbetterforlarge-ScalebackendsystystemsandSandAndRoidApps.1)JavascriptexcelcelsincreatingInteractiveWebexperienceswebexperienceswithitswithitsdynamicnnamicnnamicnnamicnnamicnemicnemicnemicnemicnemicnemicnemicnemicnddommanipulation.2)

什么是在DOM中冒泡和捕獲的事件? 什么是在DOM中冒泡和捕獲的事件? Jul 02, 2025 am 01:19 AM

事件捕獲和冒泡是DOM中事件傳播的兩個(gè)階段,捕獲是從頂層向下到目標(biāo)元素,冒泡是從目標(biāo)元素向上傳播到頂層。1.事件捕獲通過addEventListener的useCapture參數(shù)設(shè)為true實(shí)現(xiàn);2.事件冒泡是默認(rèn)行為,useCapture設(shè)為false或省略;3.可使用event.stopPropagation()阻止事件傳播;4.冒泡支持事件委托,提高動(dòng)態(tài)內(nèi)容處理效率;5.捕獲可用于提前攔截事件,如日志記錄或錯(cuò)誤處理。了解這兩個(gè)階段有助于精確控制JavaScript響應(yīng)用戶操作的時(shí)機(jī)和方式。

JavaScript:探索用于高效編碼的數(shù)據(jù)類型 JavaScript:探索用于高效編碼的數(shù)據(jù)類型 Jun 20, 2025 am 12:46 AM

javascripthassevenfundaMentalDatatypes:數(shù)字,弦,布爾值,未定義,null,object和symbol.1)numberSeadUble-eaduble-ecisionFormat,forwidevaluerangesbutbecautious.2)

如何減少JavaScript應(yīng)用程序的有效載荷大?。? />
								</a>
								<a href=如何減少JavaScript應(yīng)用程序的有效載荷大??? Jun 26, 2025 am 12:54 AM

如果JavaScript應(yīng)用加載慢、性能差,問題往往出在payload太大,解決方法包括:1.使用代碼拆分(CodeSplitting),通過React.lazy()或構(gòu)建工具將大bundle拆分為多個(gè)小文件,按需加載以減少首次下載量;2.移除未使用的代碼(TreeShaking),利用ES6模塊機(jī)制清除“死代碼”,確保引入的庫支持該特性;3.壓縮和合并資源文件,啟用Gzip/Brotli和Terser壓縮JS,合理合并文件并優(yōu)化靜態(tài)資源;4.替換重型依賴,選用輕量級(jí)庫如day.js、fetch

JavaScript模塊上的確定JS綜述:ES模塊與COMPORJS JavaScript模塊上的確定JS綜述:ES模塊與COMPORJS Jul 02, 2025 am 01:28 AM

ES模塊和CommonJS的主要區(qū)別在于加載方式和使用場(chǎng)景。1.CommonJS是同步加載,適用于Node.js服務(wù)器端環(huán)境;2.ES模塊是異步加載,適用于瀏覽器等網(wǎng)絡(luò)環(huán)境;3.語法上,ES模塊使用import/export,且必須位于頂層作用域,而CommonJS使用require/module.exports,可在運(yùn)行時(shí)動(dòng)態(tài)調(diào)用;4.CommonJS廣泛用于舊版Node.js及依賴它的庫如Express,ES模塊則適用于現(xiàn)代前端框架和Node.jsv14 ;5.雖然可混合使用,但容易引發(fā)問題

See all articles