對於前端開發人員,掌握Node.js仍然是一項寶貴技能。儘管Deno為服務器端JavaScript提供了替代方案,但Node.js的廣泛生態系統確保其持續相關性。本文假設您熟悉基於瀏覽器的JavaScript,並希望使用node.js探索服務器端的開發。對於Node.js和NPM初學者,Jamie Corkhill在Smashing Magazine上的“入門”是一個很好的資源。
瀏覽器JavaScript通常最少使用異步代碼(例如, fetch
API調用)。但是,Node.js幾乎總是需要異步編程。它的單線讀取事件循環依賴於異步回調,是其設計的基礎。這種異步至上的方法對Node.js的成功至關重要,但它為那些習慣於同步編碼的人提供了學習曲線。
讓我們構建一個簡單的測驗應用程序來說明node.js概念。 GitHub上提供了更完整的版本。該應用程序使用帶有表格,問題和答案表的SQLite數據庫。每個問題都有多個答案,其中只有一個是正確的。 Sqlite缺乏布爾類型;我們將0用於false,而為true 1。
首先,初始化NPM並安裝sqlite3
軟件包:
npm init -y NPM安裝sqlite3
將"type":"module"
添加到您的package.json
以啟用ES6模塊。創建migrate.js
來設置數據庫表:
// migrate.js 從“ sqlite3”導入sqlite3; 令db = new sqlite3.database(“ quiz.db”); db.serialize(function(){ // ...(數據庫架構創建和初始數據插入)... }); db.close();
該腳本可以創建表並使用示例數據填充它們。使用node migrate.js
運行它。
讓我們查詢數據庫。在index.js
中,我們導入sqlite3
,創建一個數據庫對象,然後使用get
函數:
// index.js 從“ sqlite3”導入sqlite3; 令db = new sqlite3.database(“ quiz.db”); db.get(``select * seal * where quizid = 0`,(err,row)=> { 如果(err){ Console.Error(err.message); } console.log(row); db.close(); });
這將測驗數據打印到控制台。
讓我們創建一個函數getQuiz(id)
以通過ID檢索測驗。僅由於異步執行而從回調中返回結果是不正確的:
//不正確 - 避免這種情況! 功能getquiz(id){ // ...(帶回調的數據庫查詢)... 返回結果; //結果將不確定! }
正確的方法使用回調來處理異步結果:
函數getquiz(id,回調){ // ...(數據庫查詢,用結果調用回調)... } getquiz(0,(quiz)=> { console.log(quiz); });
連鎖多個異步電話會導致“回調地獄”。承諾提供更清潔的解決方案:
函數獲取(params){ // ...(數據庫查詢包裹在承諾中)... } 獲取({表:“答案”,列:“ andersId”,value:2}) 。然後(...) 。然後(...) 。然後(...) 。抓住(...);
異步/等待進一步簡化異步代碼,使其類似於同步代碼:
異步函數printquizfromanswer(){ const答案=等待get({表:“答案”,列:“答案”,value:2}); // ...(類似地等待隨後的通話)... } printquizfromanswer();
頂級等待(最近的Node.js版本中可用)允許更簡潔的代碼。
為了提高效率,請使用SQL連接在單個查詢中檢索相關數據:
函數quizfromanswer(andersID,呼叫){ // ...(SQL加入查詢以獲取答案,問題和測驗數據)... }
這減少了數據庫調用的數量。
Node.js引入了用於數據庫交互,文件系統訪問,HTTP服務器等的新API。了解Node.js約定,包括package.json
文件和錯誤優先回調,至關重要。 COMPORJS模塊和ES模塊之間的差異也需要注意。
Node.js服務器端開發需要仔細處理異常和安全漏洞,與客戶端JavaScript不同,錯誤通常會影響單個用戶。
Node.js使前端開發人員充分利用其JavaScript技能進行服務器端開發。儘管異步性質呈現出學習曲線,但並發和龐大的生態系統的好處使其成為強大的工具。請記住要熟悉異步JavaScript概念,Node.js API和安全性最佳實踐。
以上是將節點JavaScript與瀏覽器中的JavaScript進行比較的詳細內容。更多資訊請關注PHP中文網其他相關文章!