首頁 web前端 js教程 nodejs教程之入門_node.js

nodejs教程之入門_node.js

May 16, 2016 pm 04:30 PM
nodejs 入門

前言

再不學nodeJs,我們就老了......在HTML5大浪襲來的時候,很多先輩就開始了NodeJs之旅,而那時我還在做伺服器端的程式
後來轉成前端,和梯隊的距離已經很大了,因為我會伺服器端語言,還乾了很久,所以至今才開始學習NodeJs,向完整的前端前進
這次學習NodeJs的計畫是:
① 1-2週學習基礎
② 1週左右開發一個簡單專案
③ 利用NodeJs開發一套用於行動端除錯的工具
④ 打包相關(這可能比較遠了)

NodeJs特點

① 非同步
從檔案讀取到網路請求,NodeJs皆以非同步完成,回呼函數佔據重要作用,在程式設計模型上Node是領先的

② 事件回呼
事件回調讓程式變得輕巧,但是具體怎麼樣還是取決於程式設計師。但回呼函數在閱讀上其實還是有一定難度的

③ 單線程
Node是單線程的,如果多線程的話,這門語言水又深了,問幾句進程中的通信時很討厭的,但線程也沒有死鎖等問題
但是效能相關就有問題了,因為不能利用多核心;

模組機制/CommonJs

我們原來做伺服器端的開發,如果沒有很好的組織程式碼的話,後期維護非常困難,所以才會有什麼MVC,什麼三層架構
而現在前端的業務邏輯逐向後端靠攏,就單頁應用來說,已經超過後端的程序邏輯
頁面view不停的增加會帶來js程式碼量的激增,如何很好的管理我們的前端程式碼成了一個問題,所以requireJs出現了......
PS:尼瑪這段和nodeJs有一毛錢關係哇......
javascript是沒有模組化系統的,於是就有CommonJs的提出,讓js具備開發大型應用的基礎

模組引用

我們如果要引用一個模組,例如數學計算相關:

var math = require('math');

模組定義

我們如果要定義自己的模組可以這樣乾

複製程式碼 程式碼如下:

exports.add = function () {
  return sum;
}

如果此函數在math中定義的話,就能使用了

math.add();

模組標識

模組識別就是傳遞給require的參數,需要為駝峰命名,指向的是一個檔案路徑,這裡和requireJS很類似的

模組實作

Node中模組實作分為兩類,一種是系統層級的核心模組,一種是使用者編寫的檔案模組
核心模組在編譯過程被翻譯成了二進位文件,Node進程啟動後,一些核心的模組會直接載入進記憶體(檔案定位、編譯執行)
文件模組需要動態加載,速度相對慢一點
但是一旦載入後,那些檔案就會被緩存,二次引入時候就會讀取快取檔案(編譯後的檔案)
這裡扯遠一點,我們在使用underscore過程中,會編譯Html形成模板函數(他真的只是個函數),其實這個就可以做快取
在部署專案前儲存編譯過後的函數,去掉html模板檔(最佳化效果不知)

在node中,每個模組都是一個物件:

複製程式碼 程式碼如下:

function Module(id, parent) {
  this.id = id;
  this.exports = {};
  //parent是關鍵字,不應該亂用
  this.parent = parent;
  if (parent && parent.children) {
    parent.children.push(this);
  }
  this.filename = null;
  this.loaded = false;
  this.children = [];
}

編譯和執行時引入檔案模組的最後一個階段,定位到具體檔案後,node會新建一個模組對象,然後根據路徑載入並編譯
每一個編譯成功的模組都會將其檔案路徑作為索引快取在Module._cache上

每個模組檔案都存在require、exports、module三個變量,但在檔案中並未定義(__filename__、__dirname__ 變數也是)
其實在編譯過程中,Node對javascript檔案內容進行了頭尾包裝(相當於自訂函數傳入window)

複製程式碼 程式碼如下:

(function (exports, require, module, __filename__, __dirname__) {
  var math = require('math');
  exports.area = function (radius) {
    return '';
  };
});

這樣,模組與模組之間做了隔離,不會互相影響,這裡和underscore的編譯有些類似......

包與NPM

Node組織了自身的核心模組,所以第三方文件模組可以有序的編寫和使用,但是在第三方模組中,模組與模組之間仍然散列在各地
相互之間不能直接引用,在模組外包和NPM則是將聯繫建立起來的一種機制
PS:很多模組會形成一個包,這個包的概念和java包的概念,才#程序集的概念應該要相似

一個包結構解壓縮後會形成幾個檔案:
① package.json 描述檔
② bin 可執行二進位目錄
③ lib javascript程式碼目錄
④ doc 文件(尼瑪基本上沒有)
⑤ test demo

以上都是CommonJS包的規範的一些東西,但是我們稍微了解一下便可(初學嘛),NPM則需要熟練掌握,借助NPM我們可以熟練安裝管理包

安裝依賴套件

安裝依賴套件是常用方法:

npm install express
執行後就會在目前目錄下建立node_modules目錄,然後再其下面建立express目錄......
PS:express是NodeJs上流行的web開發框架,幫助我們快速開發一個web應用程式
安裝結束後就可呼叫了:

複製程式碼 程式碼如下:

var express = require('express');

結語

這段簡單結束,後面我們專案實戰過程逐步深化

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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1317
25
PHP教程
1268
29
C# 教程
1248
24
一鍵生成PPT! Kimi :讓「PPT民工」先浪起來 一鍵生成PPT! Kimi :讓「PPT民工」先浪起來 Aug 01, 2024 pm 03:28 PM

Kimi:一句話,十幾秒鐘,一份PPT就新鮮出爐了。 PPT這玩意兒,可太招人煩了!開個碰頭會,要有PPT;寫個週報,要做PPT;拉個投資,要展示PPT;就連控訴出軌,都得發個PPT。大學比較像是學了個PPT專業,上課看PPT,下課做PPT。或許,37年前丹尼斯・奧斯汀發明PPT時也沒想到,有一天PPT竟然如此氾濫成災。嗎嘍們做PPT的苦逼經歷,說起來都是淚。 「一份二十多頁的PPT花了三個月,改了幾十遍,看到PPT都想吐」;「最巔峰的時候,一天做了五個PPT,連呼吸都是PPT」;「臨時開個會,都要做個

CVPR 2024全部獎項公佈!近萬人線下參會,Google華人研究員獲最佳論文獎 CVPR 2024全部獎項公佈!近萬人線下參會,Google華人研究員獲最佳論文獎 Jun 20, 2024 pm 05:43 PM

北京時間6月20日凌晨,在西雅圖舉辦的國際電腦視覺頂會CVPR2024正式公佈了最佳論文等獎項。今年共有10篇論文獲獎,其中2篇最佳論文,2篇最佳學生論文,另外還有2篇最佳論文提名和4篇最佳學生論文提名。電腦視覺(CV)領域的頂級會議是CVPR,每年都會吸引大量研究機構和高校參會。根據統計,今年共提交了11532份論文,2719篇被接收,錄取率為23.6%。根據佐治亞理工學院對CVPR2024的數據統計分析,從研究主題來看,論文數量最多的是圖像和視頻合成與生成(Imageandvideosyn

nodejs是後端框架嗎 nodejs是後端框架嗎 Apr 21, 2024 am 05:09 AM

Node.js 可作為後端框架使用,因為它提供高效能、可擴展性、跨平台支援、豐富的生態系統和易於開發等功能。

從裸機到700億參數大模型,這裡有一個教程,還有現成可用的腳本 從裸機到700億參數大模型,這裡有一個教程,還有現成可用的腳本 Jul 24, 2024 pm 08:13 PM

我們知道LLM是在大規模電腦叢集上使用海量資料訓練得到的,本站曾介紹過不少用於輔助和改進LLM訓練流程的方法和技術。而今天,我們要分享的是一篇深入技術底層的文章,介紹如何將一堆連作業系統也沒有的「裸機」變成用來訓練LLM的電腦叢集。這篇文章來自於AI新創公司Imbue,該公司致力於透過理解機器的思維方式來實現通用智慧。當然,將一堆連作業系統也沒有的「裸機」變成用於訓練LLM的電腦叢集並不是一個輕鬆的過程,充滿了探索和試錯,但Imbue最終成功訓練了一個700億參數的LLM,並在此過程中積累

AI在用 | AI製作獨居女孩生活Vlog,3天狂攬萬點讚量 AI在用 | AI製作獨居女孩生活Vlog,3天狂攬萬點讚量 Aug 07, 2024 pm 10:53 PM

機器之能報道編輯:楊文以大模型、AIGC為代表的人工智慧浪潮已經在悄悄改變我們生活及工作方式,但絕大部分人依然不知道該如何使用。因此,我們推出了「AI在用」專欄,透過直覺、有趣且簡潔的人工智慧使用案例,來具體介紹AI使用方法,並激發大家思考。我們也歡迎讀者投稿親自實踐的創新用例。影片連結:https://mp.weixin.qq.com/s/2hX_i7li3RqdE4u016yGhQ最近,獨居女孩的生活Vlog在小紅書上走紅。一個插畫風格的動畫,再配上幾句治癒系文案,短短幾天就能輕鬆狂攬上

nodejs怎麼連接mysql資料庫 nodejs怎麼連接mysql資料庫 Apr 21, 2024 am 06:13 AM

要連接 MySQL 資料庫,需要遵循以下步驟:安裝 mysql2 驅動程式。使用 mysql2.createConnection() 建立連接對象,其中包含主機位址、連接埠、使用者名稱、密碼和資料庫名稱。使用 connection.query() 執行查詢。最後使用 connection.end() 結束連線。

nodejs安裝目錄裡的npm與npm.cmd檔有什麼差別 nodejs安裝目錄裡的npm與npm.cmd檔有什麼差別 Apr 21, 2024 am 05:18 AM

Node.js 安裝目錄中有兩個與 npm 相關的文件:npm 和 npm.cmd,區別如下:擴展名不同:npm 是可執行文件,npm.cmd 是命令視窗快捷方式。 Windows 使用者:npm.cmd 可以在命令提示字元中使用,npm 只能從命令列執行。相容性:npm.cmd 特定於 Windows 系統,npm 跨平台可用。使用建議:Windows 使用者使用 npm.cmd,其他作業系統使用 npm。

細數RAG的12個痛點,英偉達高級架構師親授解決方案 細數RAG的12個痛點,英偉達高級架構師親授解決方案 Jul 11, 2024 pm 01:53 PM

檢索增強式產生(RAG)是一種使用檢索提升語言模型的技術。具體來說,就是在語言模型生成答案之前,先從廣泛的文檔資料庫中檢索相關信息,然後利用這些信息來引導生成過程。這種技術能大幅提升內容的準確性和相關性,並能有效緩解幻覺問題,提高知識更新的速度,並增強內容生成的可追溯性。 RAG無疑是最令人興奮的人工智慧研究領域之一。有關RAG的更多詳情請參閱本站專欄文章《專補大模型短板的RAG有哪些新進展?這篇綜述講明白了》。但RAG也並非完美,使用者在使用時也常會遭遇一些「痛點」。近日,英偉達生成式AI高階解決

See all articles