Node.js 開發(fā)入門(1)-介紹

一.什么是 Node.js

Node.js是一個(gè)讓JavaScript運(yùn)行在服務(wù)器端的開發(fā)平臺(tái),它讓  JavaScript的觸角伸到了服務(wù)器端.它使用了 Google 的 V8 虛擬機(jī)( Google 的Chrome 瀏覽器使用的 JavaScript 執(zhí)行環(huán)境),來(lái)解釋和執(zhí)行 JavaScript代碼.

所以說(shuō) Node.js 不是一門新的語(yǔ)言而是一個(gè)運(yùn)行時(shí)的環(huán)境.

官網(wǎng):https://nodejs.org/en/

二. Node.js 的特點(diǎn)

Node.js? is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient. Node.js' package ecosystem, npm, is the largest ecosystem of open source libraries in the world.

在官網(wǎng)的首頁(yè),我們看到上面的一句話.概括了 Node.js 的三個(gè)特點(diǎn).

  • 2.1單線程:

    Node.js不為每個(gè)客戶連接創(chuàng)建一個(gè)新的線程,而僅僅使用一個(gè)線程.當(dāng)有用戶連接了,就觸發(fā)一個(gè)內(nèi)部事件,通過(guò)非阻塞I/O,事件驅(qū)動(dòng)機(jī)制,讓Node.js程序宏觀上也是并行的.
    由于每開一個(gè)線程,就會(huì)消耗大概2M 的內(nèi)存,單線程使得操作系統(tǒng)完全不再有線程創(chuàng)建和銷毀的時(shí)間開銷,同時(shí)減少了內(nèi)存的消耗.同時(shí)如果一個(gè)用戶造成了線程的崩潰,整個(gè)服務(wù)也就崩潰了.

  • 2.2 非阻塞I/O

    當(dāng)出現(xiàn)讀取文件或數(shù)據(jù)庫(kù),網(wǎng)絡(luò)請(qǐng)求等耗時(shí)操作時(shí),會(huì)阻塞線程.由于 Node.js 采用了非阻塞 I/O, 當(dāng)某個(gè) I/O 執(zhí)行完畢時(shí),將以事件的形式通知執(zhí)行 I/O 操作的線程,線程執(zhí)行這個(gè)事件的回調(diào)函數(shù).為了處理異步 I/O, 線程必須有事件循環(huán),不斷的檢查有沒(méi)有未處理的事件.

  • 2.3 事件驅(qū)動(dòng)

Node 中,數(shù)據(jù)請(qǐng)求等行為都會(huì)觸發(fā)相應(yīng)的事件.在一個(gè)時(shí)間只能執(zhí)行一個(gè)事件回調(diào)函數(shù),在執(zhí)行一個(gè)事件回調(diào)函數(shù)的過(guò)程中,可以繼續(xù)處理其他的事件,然后返回執(zhí)行原事件的回調(diào)函數(shù).

所以在 Node.js 中所有的 I/O 都是異步的,通過(guò)回調(diào)函數(shù)進(jìn)行操作.

三. Node.js 安裝

進(jìn)入官網(wǎng) 就能看到下載的鏈接.
下載 Node.js

下載完成后進(jìn)行安裝.
裝成功后你可以在終端機(jī)中運(yùn)行 node 命令進(jìn)入了 Node.js 的交互模式.如果出現(xiàn) -bash: node: command not found,說(shuō)明沒(méi)有正確安裝.

四. helloworld

使用 node在控制臺(tái)輸出 helloworld.

  • 4.1 創(chuàng)建一個(gè) js 文件,輸入
console.log('helloworld');
  • 4.2 在 terminal中執(zhí)行文件
node 文件名. js

這時(shí)我們就會(huì)在控制臺(tái)中看到輸出的 helloworld.

五. REPL 環(huán)境

REPL (Read-eval-print loop),即輸入—求值—輸出循環(huán)。當(dāng)我們?cè)?terminal 中輸入 node, 就會(huì)進(jìn)入 REPL 環(huán)境


REPL環(huán)境

進(jìn)入 REPL 模式以后,會(huì)出現(xiàn)一個(gè)“>”提示符提示你輸入命令,輸入后按回車,Node.js 將會(huì)解析并執(zhí)行命令。如果你執(zhí)行了一個(gè)函數(shù),那么 REPL 還會(huì)在下面顯示這個(gè)函數(shù)的返回 值,上面例子中的 undefined 就是 console.log 的返回值.

六.創(chuàng)建HTTP服務(wù)器

// 使用嚴(yán)格模式, 使用 let 代替的以前的 var.
'use strict';
// const 常量
const http = require('http'); // require 引入 http 模塊
// 創(chuàng)建服務(wù)器
const server = http.createServer((req, res) => {
    if(req.url == '/favicon.ico') return; // 在 chrome 瀏覽器下.會(huì)請(qǐng)求一次favicon圖標(biāo).
    res.writeHead(200, {"Content-type": "text/html;charset=UTF-8"});
    res.write("<h1>Node.js</h1>");
    res.end(); // 注意:必須有一個(gè)end(), 否則請(qǐng)求無(wú)法結(jié)束.
}).listen(3000, "127.0.0.1"); // 監(jiān)聽端口號(hào)3000

通過(guò)上面的幾行代碼,我們即可創(chuàng)建一個(gè) HTTP 服務(wù)器.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • topics: 1.The Node.js philosophy 2.The reactor pattern 3....
    宮若石閱讀 1,126評(píng)論 0 1
  • 前言從Node.js進(jìn)入人們的視野時(shí),我們所知道的它就由這些關(guān)鍵字組成 事件驅(qū)動(dòng)、非阻塞I/O、高效、輕量,它在官...
    Www劉閱讀 1,567評(píng)論 0 18
  • # 模塊機(jī)制 node采用模塊化結(jié)構(gòu),按照CommonJS規(guī)范定義和使用模塊,模塊與文件是一一對(duì)應(yīng)關(guān)系,即加載一個(gè)...
    RichRand閱讀 2,556評(píng)論 0 3
  • 個(gè)人入門學(xué)習(xí)用筆記、不過(guò)多作為參考依據(jù)。如有錯(cuò)誤歡迎斧正 目錄 簡(jiǎn)書好像不支持錨點(diǎn)、復(fù)制搜索(反正也是寫給我自己看...
    kirito_song閱讀 2,505評(píng)論 1 37
  • 今天閱讀的是曹文軒的作品《六十六道彎》 因?yàn)楹⒆娱喿x的需要,我也看過(guò)不少曹文軒的作品。給我的感覺,他的語(yǔ)言平實(shí)簡(jiǎn)潔...
    麗莉1978閱讀 4,502評(píng)論 0 1