Nodejs入門


----------------------------Nodejs是個什么東西

 

javascript是一門完整的語言,可以運行在不同的上下文環境中.

我們平時都在瀏覽器中運行javascript代碼,瀏覽器為js提提供了一個上下文,它定義了使用JavaScript可以做什么

Node.js事實上就是另外一種上下文,它允許在后端(脫離瀏覽器環境)運行JavaScript代碼。

要實現在后台運行JavaScript代碼,代碼需要先被解釋然后正確的執行。Node.js的原理正是如此,它使用了Google的V8虛擬機(Google的Chrome瀏覽器使用的JavaScript執行環境),來解釋和執行JavaScript代碼。

 

---------------------------------技巧

  1. node安裝以后可以用 $ node app 命令執行。
  2. 如果直接用輸入node回車,會進入持續的node環境,可運行javascript代碼,按兩次ctrl+c退出
  3. 前幾天摸索的mongodb也有這個功能,因為mongodb的shell是基於javascript的
  4. 兩者的連續輸入模式都可以輸入,運行javascript代碼。
  5. node的模塊只能加載一次,quire導入模塊的時候,會先從require.cache 中檢查模塊是否已經加載,如果沒有加載,才會從硬盤中查找模塊腳本並加載。 require支持相對路徑查找模塊,例如上面代碼中require('./moduleExample')中的“./”就代表在當前目錄下查找。

-----------------------------Nodejs是事件驅動的

 

不過這是Node.js原生的工作方式。它是事件驅動的,這也是它為什么這么快的原因。

事件驅動的異步服務器端JavaScript和它的回調啦!

 1 function onRequest (request,response) {
 2     console.log('Request received');
 3     response.writeHead(200,{"Content-Type":"text/plain"});
 4     response.write("Hello World");
 5     response.end();
 6 }
 7 
 8 http.createServer(onRequest).listen(8888);
 9 
10 console.log('Server has started');

 

http.createServer(onRequest).listen(8888);

onRequest是我們傳遞進去的回調函數,當我們請求頁面的時候調用,會傳入兩個參數,這兩個參數都是對象.

這兩個參數對象可以包含請求的細節(request),和我們返回給用戶的內容(response)

當收到請求時,使用 response.writeHead() 函數發送一個HTTP狀態200和HTTP頭的內容類型(content-type),使用 response.write() 函數在HTTP相應主體中發送文本“Hello World"。

response.end()完成響應.

 

---------------------------------nodejs 模塊

 

var http = require('http') //http模塊

這里我們請求了一個http模塊,返回了一個擁有所有http模塊共有方法的對象,賦值給了變量。

一般變量名和模塊名一致。

 

---------------------------------nodejs 編譯型的?

 

我修改了js中的一些內容,必須重新node server.js才能實現,是不是變成了java的編譯的,后續看看他能不能動態接收參數。

 

叫重啟服務器,具體內容還未知

 

--------------------------------傳參強大之處

 

就像這樣,我們傳遞一個東西,然后服務器利用這個東西來完成一些事。嗨那個叫路由的東西,能幫我把這個路由一下嗎?

 

我僅僅是需要拿你來執行一個動作,你不需要名詞,只需要動詞。即參數傳遞的是直接要用的動詞函數.

 

--------------------------------阻塞與非阻塞

 

因為Node一向是這樣來標榜自己的:“在node中除了代碼,所有一切都是並行執行的”

這句話的意思是說,Node.js可以在不新增額外線程的情況下,依然可以對任務進行並行處理 —— Node.js是單線程的。它通過事件輪詢(event loop)來實現並行操作,對此,我們應該要充分利用這一點 —— 盡可能的避免阻塞操作,取而代之,多使用非阻塞操作。

然而,要用非阻塞操作,我們需要使用回調,通過將函數作為參數傳遞給其他需要花時間做處理的函數(比方說,休眠10秒,或者查詢數據庫,又或者是進行大量的計算)。

child_process。之所以用它,是為了實現一個既簡單又實用的非阻塞操作:exec()

exec()在后台執行的時候,Node.js自身會繼續執行后面的代碼。並且我們這里假設傳遞給exec()的回調函數,只會在“find /”命令執行完成之后才會被調用。

請求處理程序 -> 請求路由 -> 服務器 這樣方式傳遞值,最后給用戶


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM