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

首頁 web前端 js教程 羽毛的初學(xué)者指南。

羽毛的初學(xué)者指南。

Feb 14, 2025 am 09:55 AM

Feathers.js:快速構(gòu)建RESTful API服務(wù)器的指南

A Beginner’s Guide to Feathers.js

核心要點(diǎn):

  • Feathers.js 簡(jiǎn)化了RESTful API服務(wù)器的創(chuàng)建,處理大部分重複的後端工作,讓開發(fā)者專注於代碼定制和配置。
  • 該框架基於Express構(gòu)建,支持SQL和NoSQL數(shù)據(jù)庫(kù),使用自動(dòng)生成必要代碼的服務(wù),可以輕鬆進(jìn)行CRUD操作。
  • Feathers.js中的身份驗(yàn)證可以使用JSON Web Tokens (JWT)來保護(hù)API端點(diǎn),確保只有授權(quán)用戶才能訪問或修改數(shù)據(jù)。
  • Feathers.js中的鉤子(Hooks)充當(dāng)中間件函數(shù),可以在數(shù)據(jù)到達(dá)數(shù)據(jù)庫(kù)之前或之後操作數(shù)據(jù),這對(duì)於驗(yàn)證、授權(quán)和動(dòng)態(tài)添加字段等任務(wù)非常有用。
  • Feathers.js 旨在易於使用和擴(kuò)展,通過WebSockets支持實(shí)時(shí)更新,並提供適用於各種前端框架的靈活架構(gòu)。

本文將指導(dǎo)您使用Feathers.js在Node.js中構(gòu)建RESTful API服務(wù)器。

API服務(wù)器,也稱為應(yīng)用程序服務(wù)器,是一個(gè)向前端應(yīng)用程序提供數(shù)據(jù)的程序。它還在後端處理業(yè)務(wù)邏輯,並提供對(duì)組織數(shù)據(jù)庫(kù)的受限訪問。它不僅可以防止未經(jīng)授權(quán)的人員訪問數(shù)據(jù);如果登錄用戶沒有權(quán)限,它還可以限制他們?cè)L問或更改數(shù)據(jù)。

您構(gòu)建的每個(gè)應(yīng)用程序都需要向最終用戶提供服務(wù)。為此,您的應(yīng)用程序需要處理數(shù)據(jù)。您可以使用遠(yuǎn)程API來創(chuàng)建新服務(wù)。但是,對(duì)於大多數(shù)應(yīng)用程序,您需要管理自己的數(shù)據(jù)存儲(chǔ)。一個(gè)流行的選擇是使用在線數(shù)據(jù)存儲(chǔ)服務(wù),例如Firebase。這樣,您不必處理運(yùn)行分佈式數(shù)據(jù)庫(kù)服務(wù)器的繁瑣細(xì)節(jié)。但是,您的項(xiàng)目需求可能需要使用功能齊全的內(nèi)部數(shù)據(jù)庫(kù)管理系統(tǒng),例如MongoDB或Oracle。為了讓您的前端應(yīng)用程序訪問數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù),您需要一個(gè)位於數(shù)據(jù)庫(kù)和前端應(yīng)用程序之間的服務(wù)器應(yīng)用程序。

A Beginner’s Guide to Feathers.js

如上圖所示,應(yīng)用程序服務(wù)器的工作是從數(shù)據(jù)庫(kù)中使用SQL或NoSQL命令訪問數(shù)據(jù),並將其轉(zhuǎn)換為前端應(yīng)用程序(客戶端瀏覽器)可以理解的格式——例如JSON。此外,應(yīng)用程序服務(wù)器可以使用各種安全協(xié)議——例如HTTPS加密和令牌授權(quán)——來確保數(shù)據(jù)庫(kù)和客戶端應(yīng)用程序之間的通信安全可靠。使用這種架構(gòu)的一個(gè)主要優(yōu)點(diǎn)是,您可以使用相同的應(yīng)用程序服務(wù)器部署針對(duì)不同平臺(tái)的應(yīng)用程序——桌面、移動(dòng)、Web等等。而且,為了高效地為更多用戶提供服務(wù)並實(shí)現(xiàn)快速的響應(yīng)時(shí)間,也很容易水平擴(kuò)展您的應(yīng)用程序。

我們將構(gòu)建一個(gè)簡(jiǎn)單的API服務(wù)器,並演示Feathers提供的各種功能。

先決條件:

在開始學(xué)習(xí)本教程之前,您需要對(duì)以下主題有紮實(shí)的基礎(chǔ):

  • ES6 JavaScript
  • 創(chuàng)建Express應(yīng)用程序
  • 使用Express創(chuàng)建RESTful API

Feathers構(gòu)建在Express之上,Express是Node.js的一個(gè)極簡(jiǎn)主義Web框架。如果您完成了鏈接中演示的教程,您會(huì)發(fā)現(xiàn)僅僅使用Express構(gòu)建RESTful API非常費(fèi)力。使用Feathers,大部分重複性工作已經(jīng)為您完成。您只需要專注於配置和定制代碼。讓我們深入代碼,學(xué)習(xí)這個(gè)Web框架是如何工作的。

項(xiàng)目創(chuàng)建:

要開始使用Feathers,您需要全局安裝其命令行應(yīng)用程序:

npm install -g @feathersjs/cli

接下來,使用以下命令創(chuàng)建一個(gè)新的API項(xiàng)目:

mkdir contacts-api
cd contacts-api
feathers generate app

以下是我的選擇,您可以隨意選擇任何測(cè)試框架。不幸的是,測(cè)試不在本文的重點(diǎn)範(fàn)圍內(nèi),因此這裡不會(huì)介紹。我個(gè)人喜歡簡(jiǎn)單,這就是我選擇Jest的原因。

A Beginner’s Guide to Feathers.js

安裝完成後,您可以打開您喜歡的代碼編輯器查看項(xiàng)目文件。

A Beginner’s Guide to Feathers.js

如果您完成了我在先決條件部分列出的Express教程,那么生成的代碼不應(yīng)該讓您感到害怕。這是一個(gè)簡(jiǎn)短的摘要,描述了文件夾和文件。

A Beginner’s Guide to Feathers.js

現(xiàn)在不必太擔(dān)心每個(gè)文件的作用。在本教程的過程中,您會(huì)逐漸了解它們的工作方式?,F(xiàn)在,讓我們確認(rèn)測(cè)試是否正常工作。

代碼風(fēng)格檢查(Linting):

為了確保我們的項(xiàng)目符合定義的ESLint規(guī)則,只需運(yùn)行命令npm test。如果您使用的是Unix或Linux平臺(tái),這應(yīng)該可以正常運(yùn)行。如果您使用的是Windows,則需要調(diào)整一些內(nèi)容才能成功運(yùn)行測(cè)試。

首先,轉(zhuǎn)到package.json並查看scripts部分。將test行更改為:

"scripts": {
  "test": "npm run eslint && SET NODE_ENV= npm run jest",
},

接下來,如果您在Visual Studio Code中安裝了Prettier,則需要在“工作區(qū)設(shè)置”選項(xiàng)卡中將單引號(hào)設(shè)置更改為true:

{
  "prettier.singleQuote": true
}

最後,確保在創(chuàng)建或編輯任何文件時(shí),換行符為L(zhǎng)F。如果您使用的是Visual Studio Code或類似的編輯器,您可以在狀態(tài)欄中檢查當(dāng)前的換行符樣式。如果顯示CRLF,則更改為L(zhǎng)F。進(jìn)行這些更改將幫助您通過代碼風(fēng)格檢查測(cè)試。不幸的是,要使測(cè)試通過需要更多工作,這裡將不作介紹。

讓我們看看如何生成CRUD RESTful接口。

生成服務(wù):

在Express中構(gòu)建RESTful CRUD API接口需要一些工作。在Feathers中,您只需執(zhí)行單個(gè)命令,回答幾個(gè)問題,即可生成代碼:

npm install -g @feathersjs/cli

在本教程中,我們將使用NeDB數(shù)據(jù)庫(kù)。 Feathers確實(shí)支持SQL數(shù)據(jù)庫(kù)(如MySQL)和NoSQL數(shù)據(jù)庫(kù)(如MongoDB)。但是,安裝數(shù)據(jù)庫(kù)系統(tǒng)——無論是在您的機(jī)器上還是在雲(yún)服務(wù)器上——都需要花費(fèi)一定的時(shí)間來配置它。另一方面,NeDB是一個(gè)完全用JavaScript編寫的內(nèi)存數(shù)據(jù)庫(kù),支持MongoDB API的一個(gè)子集。無需配置;您只需安裝它即可。它非常適合原型設(shè)計(jì)和測(cè)試新應(yīng)用程序。這就是我們將在本教程中使用的數(shù)據(jù)庫(kù)。

讓我們簡(jiǎn)要地看一下使用此命令生成的一些文件:

  • services/contacts/contact.service.js。這是一個(gè)Feathers服務(wù),它為/contacts提供CRUD API端點(diǎn)。非常小,不是嗎?這是因?yàn)镕eathers為我們完成了繁重的工作。它使我們免於編寫樣板CRUD代碼。
  • services/contacts/contact.hooks.js。在這裡,我們自定義CRUD邏輯的行為。我們有before部分,我們可以在Feathers讀取或?qū)懭霐?shù)據(jù)庫(kù)之前檢查或更改數(shù)據(jù)。我們還有一個(gè)after部分,我們可以在將結(jié)果發(fā)送到客戶端應(yīng)用程序之前檢查或更改數(shù)據(jù)庫(kù)中的結(jié)果。我們可以執(zhí)行諸如限制訪問、數(shù)據(jù)驗(yàn)證、執(zhí)行聯(lián)接操作以及計(jì)算附加字段或列的值等操作。
  • models/contacts.model.js。在這裡,我們定義一個(gè)模型並將其附加到數(shù)據(jù)庫(kù)表。這也是我們定義模式的地方,該模式可用於在插入或更新新記錄時(shí)驗(yàn)證字段。不幸的是,NeDB不支持模式。但是,我已經(jīng)提供了一個(gè)連接到MongoDB的模型示例,該模型通過mongoose適配器支持模式功能:
mkdir contacts-api
cd contacts-api
feathers generate app

儘管使用NeDB有一些限制,但它仍然是一個(gè)非常適合原型設(shè)計(jì)的數(shù)據(jù)庫(kù)。大多數(shù)NoSQL數(shù)據(jù)庫(kù)允許您使用任何結(jié)構(gòu)提交數(shù)據(jù),而無需首先定義模式。最好在實(shí)現(xiàn)項(xiàng)目需求後實(shí)現(xiàn)模式。有了模式,F(xiàn)eathers將使用您定義的規(guī)則為您執(zhí)行字段驗(yàn)證。您需要一個(gè)可用於生產(chǎn)的數(shù)據(jù)庫(kù)(如MongoDB)才能定義模式。請(qǐng)注意,開發(fā)數(shù)據(jù)庫(kù)的配置定義在config/default.json中:

"scripts": {
  "test": "npm run eslint && SET NODE_ENV= npm run jest",
},

這是提供數(shù)據(jù)庫(kù)憑據(jù)的地方。我們還有另一個(gè)配置文件config/production.json。這是在部署Feathers應(yīng)用程序時(shí)使用的生產(chǎn)數(shù)據(jù)庫(kù)配置。在開發(fā)過程中使用單獨(dú)的數(shù)據(jù)庫(kù)非常重要。否則,您有刪除或損壞生產(chǎn)數(shù)據(jù)庫(kù)中業(yè)務(wù)運(yùn)營(yíng)數(shù)據(jù)的風(fēng)險(xiǎn)。

現(xiàn)在我們已經(jīng)設(shè)置了聯(lián)繫人的CRUD服務(wù),是時(shí)候試一試了。您可以使用命令npm start啟動(dòng)Feather服務(wù)器。請(qǐng)注意,此服務(wù)器不支持熱重載。因此,每次更改代碼時(shí)都需要重新啟動(dòng)它。為了與我們的Feathers應(yīng)用程序交互,我們需要一個(gè)API瀏覽器工具,例如Postman或Insomnia。在本教程中,我將使用Insomnia,但是您可以輕鬆地使用Postman或任何其他工具來進(jìn)行操作。

創(chuàng)建新的GET請(qǐng)求(按Ctrl N),並將其命名為“列出聯(lián)繫人”。在URL部分,輸入http://localhost:3030/contacts。當(dāng)您點(diǎn)擊“發(fā)送”按鈕時(shí),您應(yīng)該看到以下視圖:

A Beginner’s Guide to Feathers.js

什麼也沒有!我們的數(shù)據(jù)庫(kù)當(dāng)前為空,因此我們需要?jiǎng)?chuàng)建一些新的聯(lián)繫人。創(chuàng)建一個(gè)名為“創(chuàng)建聯(lián)繫人”的新請(qǐng)求。填寫其餘字段,如下所示:

A Beginner’s Guide to Feathers.js

如果您忘記將上述表單中的方法更改為POST,您可以稍後進(jìn)行更改。將方法更改為POST,並將“正文”選項(xiàng)卡更改為JSON。將以下數(shù)據(jù)複製到JSON選項(xiàng)卡中:

npm install -g @feathersjs/cli

當(dāng)您點(diǎn)擊“發(fā)送”按鈕時(shí),您應(yīng)該會(huì)收到以下響應(yīng)。請(qǐng)注意,已為您的新聯(lián)繫人生成了一個(gè)_id。

A Beginner’s Guide to Feathers.js

返回“列出聯(lián)繫人”,然後再次點(diǎn)擊“發(fā)送”按鈕。您應(yīng)該得到以下結(jié)果:

mkdir contacts-api
cd contacts-api
feathers generate app

返回“創(chuàng)建聯(lián)繫人”,並發(fā)布幾個(gè)新記錄:

"scripts": {
  "test": "npm run eslint && SET NODE_ENV= npm run jest",
},
{
  "prettier.singleQuote": true
}

現(xiàn)在讓我們執(zhí)行更新操作。為此,我們不會(huì)使用UPDATE HTTP方法。此方法將完全覆蓋記錄。我們想要做的只是覆蓋單個(gè)字段,而不是整個(gè)記錄。為此,我們將使用PATCH。創(chuàng)建一個(gè)新的請(qǐng)求,“更新聯(lián)繫人”,如下所示:

A Beginner’s Guide to Feathers.js

在URL字段中,輸入http://localhost:3030/contacts/{_id}。用第一條記錄的ID替換{_id}。將以下數(shù)據(jù)粘貼到JSON選項(xiàng)卡中:

feathers generate service

點(diǎn)擊“發(fā)送”按鈕。您應(yīng)該會(huì)看到以下結(jié)果:

A Beginner’s Guide to Feathers.js

請(qǐng)注意其餘字段保持不變。接下來,我們將刪除一條記錄。這很容易。只需創(chuàng)建一個(gè)新的DELETE請(qǐng)求,並將其命名為“刪除聯(lián)繫人”。在URL字段中,使用格式http://localhost:3030/contacts/{_id}。就像之前一樣,用要?jiǎng)h除的記錄的ID替換{_id}。點(diǎn)擊“發(fā)送”將為您刪除該記錄。您可以通過再次運(yùn)行“列出聯(lián)繫人”請(qǐng)求來確認(rèn)。

我們剛剛驗(yàn)證了所有CRUD操作都運(yùn)行正常。在下一節(jié)中,我們將學(xué)習(xí)如何設(shè)置身份驗(yàn)證。

(以下內(nèi)容與原文類似,但進(jìn)行了部分語句調(diào)整和段落合併,以提高可讀性和流暢性,並保持原意不變。圖片格式保持不變。)

身份驗(yàn)證:

目前,我們的/contacts API端點(diǎn)不受保護(hù)。如果我們將應(yīng)用程序部署到雲(yún)服務(wù)器,任何擁有URL的人都可以訪問和操作我們的記錄。為了限制訪問,我們需要設(shè)置身份驗(yàn)證。我們將使用JSON Web Tokens來為我們的API應(yīng)用程序?qū)崿F(xiàn)身份驗(yàn)證。運(yùn)行以下命令來設(shè)置它:

npm install -g @feathersjs/cli

如您所見,F(xiàn)eathers支持不同的用戶身份驗(yàn)證方式。 “本地用戶名 密碼”選項(xiàng)最容易設(shè)置。

選擇以下選項(xiàng):

接下來,我們需要?jiǎng)?chuàng)建一個(gè)新用戶。我們可以使用Insomnia或任何其他API瀏覽器工具來完成此操作。創(chuàng)建一個(gè)新的請(qǐng)求,並將其命名為“創(chuàng)建用戶”。

在JSON選項(xiàng)卡中,發(fā)送以下數(shù)據(jù):

mkdir contacts-api
cd contacts-api
feathers generate app

您應(yīng)該會(huì)收到類似以下的響應(yīng):

我們現(xiàn)在有了一個(gè)用戶。讓我們通過創(chuàng)建一個(gè)新的請(qǐng)求“列出用戶”並發(fā)送URL http://localhost:3030/users來確認(rèn)這一點(diǎn)。不幸的是,您將收到以下響應(yīng):

我們需要進(jìn)行身份驗(yàn)證才能訪問此數(shù)據(jù)。由於我們沒有開發(fā)可以用來登錄的前端應(yīng)用程序,我們將繼續(xù)使用API瀏覽器。創(chuàng)建一個(gè)新的請(qǐng)求,並將其命名為“獲取JWT令牌”。填寫表單,如下所示:

此請(qǐng)求使用POST方法。為了更清晰起見,您可以將其重命名為“登錄”。在JSON選項(xiàng)卡中,複製以下數(shù)據(jù):

"scripts": {
  "test": "npm run eslint && SET NODE_ENV= npm run jest",
},

點(diǎn)擊發(fā)送按鈕後,您應(yīng)該會(huì)收到以下響應(yīng):

複製令牌代碼(不帶雙引號(hào))。轉(zhuǎn)到“列出用戶”請(qǐng)求頁面,選擇“Auth”選項(xiàng)卡並選擇Bearer。將此令牌代碼粘貼到TOKEN字段中。

點(diǎn)擊“發(fā)送”按鈕後,您應(yīng)該會(huì)看到用戶列表。請(qǐng)注意,我們的身份驗(yàn)證系統(tǒng)並不完全安全。任何擁有/users URL端點(diǎn)的人都可以創(chuàng)建一個(gè)新帳戶並訪問我們的系統(tǒng)。為了防止未經(jīng)授權(quán)創(chuàng)建新帳戶,我們也需要限制該端點(diǎn)。打開文件services/users/users.hooks.js並更新以下代碼段:

這將確保只有經(jīng)過身份驗(yàn)證的用戶才能創(chuàng)建新帳戶。下一步是保護(hù)/contacts端點(diǎn)。只需打開文件services/contacts/contacts.hooks.js並相應(yīng)地進(jìn)行更新:

重新啟動(dòng)Feathers服務(wù)器以使代碼更改生效。如果您嘗試運(yùn)行“列出聯(lián)繫人”請(qǐng)求,您將收到以下響應(yīng):

要進(jìn)行身份驗(yàn)證,您需要像之前一樣設(shè)置Bearer令牌。完成此操作後,您可以發(fā)送請(qǐng)求,並且應(yīng)該會(huì)收到您的聯(lián)繫人列表。請(qǐng)注意,您之前獲得的令牌將在一天后過期。為提高效率,最好使用環(huán)境變量,以便更容易一次更新所有API請(qǐng)求參數(shù)。在構(gòu)建前端應(yīng)用程序時(shí),您需要將此令牌存儲(chǔ)在本地存儲(chǔ)中。不要使用cookie。否則,您的應(yīng)用程序?qū)⑷菀资艿紺SRF攻擊。查看Feathers安全文檔,了解您應(yīng)該注意的其他安全風(fēng)險(xiǎn)。

現(xiàn)在您已經(jīng)設(shè)置了身份驗(yàn)證,之後創(chuàng)建的任何新服務(wù)都將為您提供保護(hù)新端點(diǎn)的選項(xiàng)。讓我們?cè)谙乱还?jié)中查看本教程的最後一個(gè)主題。

鉤子(Hooks):

鉤子是附加到服務(wù)方法之前、之後或出錯(cuò)時(shí)的中間件函數(shù)。它們通常用於處理日誌記錄、限制訪問、保護(hù)字段、填充相關(guān)實(shí)體、發(fā)送通知等。如果您查看services/users/users.hooks.js,您可以看到一些內(nèi)置的Feathers鉤子正在使用中。我們將創(chuàng)建我們自己的自定義鉤子。首先,停止服務(wù)器並刪除data/contacts.db數(shù)據(jù)庫(kù)表。接下來,使用以下命令生成一個(gè)新鉤子:

npm install -g @feathersjs/cli

使用以下選項(xiàng)創(chuàng)建自定義鉤子process-contact

我們想在這個(gè)鉤子中做的是在處理“創(chuàng)建聯(lián)繫人”請(qǐng)求之前註入兩個(gè)新字段。

  • createdBy:通過_id鏈接到當(dāng)前登錄的用戶
  • createdOn:添加創(chuàng)建日期

打開文件hooks/process-contact.js並按如下方式更新文件:

接下來,創(chuàng)建一個(gè)另一個(gè)鉤子populate-user,它將在請(qǐng)求時(shí)將用戶對(duì)象附加到每個(gè)聯(lián)繫人記錄。按照以下屏幕截圖中的說明進(jìn)行操作:

打開文件hooks/populate-user並插入以下代碼:

現(xiàn)在您可以啟動(dòng)服務(wù)器了。使用“創(chuàng)建聯(lián)繫人”請(qǐng)求再次創(chuàng)建三個(gè)聯(lián)繫人。如果您還沒有設(shè)置Bearer令牌,請(qǐng)?jiān)O(shè)置它。否則,您將收到授權(quán)錯(cuò)誤。這是創(chuàng)建新聯(lián)繫人時(shí)應(yīng)該得到的響應(yīng)類型:

總結(jié):

我希望您現(xiàn)在已經(jīng)學(xué)習(xí)瞭如何快速構(gòu)建自己的RESTful API服務(wù)器。我們只觸及了基礎(chǔ)知識(shí),您應(yīng)該閱讀完整的指南以發(fā)現(xiàn)Feathers可以提供的更多功能,這些功能可以幫助您以最小的努力實(shí)現(xiàn)高級(jí)功能。您還應(yīng)該查看Awesome Feathers頁面,其中包含大量的資源。無論您需要插件、項(xiàng)目示例還是教程,您都可能會(huì)在那裡找到鏈接。您還應(yīng)該查看Feathers-plus CLI,它是增強(qiáng)版的Feathers。它在Feathers CLI已提供的功能之上添加了新功能,例如生成用於播種和GraphQL支持的代碼。

如果您想進(jìn)一步改進(jìn)contacts-api項(xiàng)目,我建議您使用您選擇的框架創(chuàng)建一個(gè)新的前端應(yīng)用程序。為/contacts/users端點(diǎn)構(gòu)建登錄屏幕和CRUD頁面。享受實(shí)施挑戰(zhàn)的樂趣。

關(guān)於Feathers.js的常見問題:

  • 什麼是Feathers.js? Feathers.js是一個(gè)用於構(gòu)建實(shí)時(shí)應(yīng)用程序的Web框架。它旨在輕量級(jí)、靈活且易於使用,提供了一套用於構(gòu)建可擴(kuò)展和可維護(hù)服務(wù)器端應(yīng)用程序的工具和模式。

  • Feathers.js支持哪些編程語言? Feathers.js主要在服務(wù)器端和客戶端使用JavaScript。它可以在服務(wù)器上與Node.js一起使用,並支持客戶端上的各種JavaScript框架,包括React、Angular和Vue.js等框架。

  • Feathers.js的關(guān)鍵特性是什麼? Feathers.js包括實(shí)時(shí)功能(通過WebSocket和RESTful API)、面向服務(wù)的架構(gòu)、對(duì)各種數(shù)據(jù)庫(kù)(MongoDB、PostgreSQL等)的支持、身份驗(yàn)證和授權(quán)機(jī)制以及用於擴(kuò)展的插件系統(tǒng)等特性。

  • Feathers.js如何處理實(shí)時(shí)通信? Feathers.js利用WebSockets的功能來實(shí)現(xiàn)實(shí)時(shí)通信。它開箱即用地提供了一個(gè)實(shí)時(shí)API,允許客戶端在服務(wù)器上的數(shù)據(jù)發(fā)生更改時(shí)接收實(shí)時(shí)更新。

  • 我可以將Feathers.js用於服務(wù)器端渲染(SSR)嗎? 雖然Feathers.js主要用於構(gòu)建API和實(shí)時(shí)應(yīng)用程序,但它可以與Next.js或Nuxt.js等其他框架結(jié)合使用,以實(shí)現(xiàn)Web應(yīng)用程序的服務(wù)器端渲染(SSR)。

所有圖片鏈接都保留了原文的格式。

以上是羽毛的初學(xué)者指南。的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)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脫衣器

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ā)。

JavaScript評(píng)論:簡(jiǎn)短說明 JavaScript評(píng)論:簡(jiǎn)短說明 Jun 19, 2025 am 12:40 AM

JavascriptconcommentsenceenceEncorenceEnterential gransimenting,reading and guidingCodeeXecution.1)單inecommentsareusedforquickexplanations.2)多l(xiāng)inecommentsexplaincomplexlogicorprovideDocumentation.3)

如何在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)格式化日期需拼接字符串,也可使用第三方庫(kù);4.處理時(shí)區(qū)問題建議使用支持時(shí)區(qū)的庫(kù),如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)用程序的有效載荷大??? 如何減少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ī)制清除“死代碼”,確保引入的庫(kù)支持該特性;3.壓縮和合併資源文件,啟用Gzip/Brotli和Terser壓縮JS,合理合併文件並優(yōu)化靜態(tài)資源;4.替換重型依賴,選用輕量級(jí)庫(kù)如day.js、fetch

See all articles