nodejs原生模塊簡介


一、Express框架

前面的章節已經介紹過了,可以使用npm來安裝node.js模塊。具體操作請參照以前寫的nodejs概論。

Express是一個nodejs的web開源框架,用於快速的搭建web項目。其主要集成了web的http服務器的創建、靜態文本管理、服務器URL地址請求處理、get和post請求處理分發、session處理等功能。

 

使用方法,在cmd中打開你所想創建web項目的路徑。然后輸入

Express appname

即可創建一個名為appname的web項目。控制台打印結果

在cmd中進入appname文件夾輸入

node appname.js

返回結果如下圖,表示安裝成功!

在項目開發中經常會出現這樣的問題

 

此錯誤表示沒有安裝相關模塊,解決辦法是在cmd上打開項目文件夾,輸入

npm install express

安裝成功后會在本文件路徑下生成一個node_modules,里面包含了Express框架代碼。

其他模塊也可用類似的方法進行安裝,安裝后的路徑同樣是在node_modules下。

二、jade模塊

jade是一款高性能、簡潔易懂的模板引擎。可通過jade來編寫html文件。

jade類似一個用於快速編寫html的語言,其編寫后的文件后綴為.jade。

以下為文件的內容

 

在cmd中輸入,壓縮的過的可以通過加-P來不壓縮,如果每次更改模版都要打命令行一次很麻煩是不是,我們可以通過加上jade -P -w jade.jade  加上一個-w來開啟監視模式,每次更改模版,html文件都會自動編譯咯

 

生成后的html文件如下:

在jada文件中是可以使用for循環和if判斷語句的,可以讓你體會類似JSP的<%%>和php的<php></php>在網頁上輸出數據的快感。

三、forever模塊

nodejs作為http服務器,需要確保服務順利進行,要注意一下兩點:

1.后台服務運行,監控運行日志,以及http運行日志;

2.確保項目的正常安全運行,Node.js的啟動命令node,很大程度無法滿足運行需求;

Node.js的forever模塊在第二點就可以起到很大的作用,同時其擁有監控文件更改、自動重啟等功能。

forever模塊的使用方法有兩種:1.在命令行中使用

forever -l forever.log -o out.log -e err.log app.js
-l forever.log -o out.log -e err.log分別指定了forever的運行日志,腳本流水日志,腳本運行錯誤日志,啟動后將在本文件夾下產生out.log、err.log文件。

2.在編碼中require forever模塊使用。

四、Socket.IO模塊

Socket.IO模塊主要功能是將WebSocket協議應用到所有瀏覽器。主要用於實時的長連接多求情項目中。

例如:在線聯網游戲,實時聊天、實時股票查看、二維碼掃描登錄等。

安裝方法仍然是在cmd在中輸入npm install socket.io

如何使用Socket.IO來創建一個項目。

需要分別實現服務端和客戶端的邏輯:

先創建一個服務端的node.js腳本index_server.js

 

var app = require('http').createServer(handler)//創建服務器app
   , io = require('socket.io').listen(app)//引用socket.io模塊監聽app
   , fs = require('fs')//引用文件處理模塊

 app.listen(80);//指定app監聽的端口,第二個參數127.0.0.1可省略
 
 function handler (req, res) {
   fs.readFile(__dirname + '/index.html',
   function (err, data) {
     if (err) {
       res.writeHead(500);
       return res.end('Error loading index.html');
     }
     res.writeHead(200);
     res.end(data);
   });
 }
 
 io.sockets.on('connection', function (socket) {
   socket.emit('news', { hello: 'world' });
   socket.on('my other event', function (data) {
     console.log(data);
   });
 });

 

 

 

其中,socket.emit()為Socket發送消息的函數,第一個參數表示發送消息的key值,第二個參數為發送消息的內容,也就是發送的數據。

Socket。on()為Socket接收消息的函數,第一個參數為接收消息的可以值,第二個參數為回調函數,其中回調函數攜帶的參數為接收消息所發送的數據。

接下來web前端如何使用JavaScrit 來連接Socket服務器。

新建一個index_client.html

<script type="text/javascript" src="socket.js"></script>
<script type="text/javascript">
    var socket = io.connect('http://localhost');//創建本地sock連接
    socket.on('news',function (data) {//Socket接收news消息時執行回調函數
        console.log(data);
        socket.emit('my other event',{my:'data'});
    });
</script>
<script type="text/javascript" src="socket.js"></script>加載已經安裝好的Socket.io的本地JavaScrit文件。
var socket = io.connect('http://localhost');因為端口為80,所有這里可以不端口號
socket.on('news',function (data){}//客戶端接收news消息成功后,發送my other event消息到服務端,發送的消息內容為json對象{my:'data'}

接下來只需要運行服務端的index_server.js文件來啟動socket服務

效果:在瀏覽器輸入http://127.0.0.1按F12調出瀏覽器的控制台console即可看見打印出了一個object對象。

執行完畢后可能會報錯:catnot find module socket.io,說明你的socket.IO沒有安裝,或已經安裝並配置為全局,但你的安裝路徑並沒有配置到在path中,所有無法引用。
你可以選擇配置path,或者安裝到項目內。這里建議安裝到你的項目目錄下,而不是簡單粗暴的配置為全局。先卸載npm uninstall socket.io 進入指定目錄后安裝
node index_server.js

    socket.io詳細請參閱    http://cnodejs.org/topic/50a1fcc7637ffa4155b5a264

 五、request模塊

request模塊為開發者提供了一種簡單訪問HTTP請求的方法。request還支持HTTPS的訪問方法。

安裝:

npm install requset

request模塊基本上覆蓋了所有的HTTP請求方式如GET,POST,HEAD,DEL等。但其最基本的兩個方法是request.get()和request.post().

get和post的區別

get:

1.使用get向服務器發出和接收的請求會附在url之后。類似:http://www.baidu.com?id=1221&name=5555這個url中傳遞了兩個參數,一個為id,一個為name。

2.get請求不能超過1024個字節。

post沒有限制,也不會附在url上。

接下來做一個簡單的實例

get實例:

首先新建一個服務器app_get.js

var http= require("http");
http.createServer(function(req,res){
    res.writeHead(200,{'content-Type':'text/plain'});
    res.end('Hello world\n'+req.method);
}).listen(1337,"127.0.0.1");

再建一個發送求情的request_get.js文件

var request=require('request');
request.get("http://127.0.0.1:1337",function(error,response,result){
    console.log(result);
});

在CMD中運行app_get.js,運行成功后,再打開一個cmd(之前的cmd不要關閉),執行request_get.js文件。

執行后的結果如下

hello world
GET

可以看出,通過request.get方法訪問

http://127.0.0.1:1337 返回的結果就是res.end()的參數

post實例:
和上面一樣,先新建服務器app_post.js
var http= require("http"),
    querystring=require('querystring');
http.createServer(function(req,res){
    var postData="";
    //開始異步接收客戶端post的數據
    req.addListener("data",function (postDataChunk) {
        postData += postDataChunk;
    });
    //異步post數據接收完畢后執行匿名回調函數
    req.addListener("end",function(){
        var postStr=JSON.stringify(querystring.parse(postData));
        res.writeHead(200,{'content-Type':'text/plain'});
        res.end(postStr+'\n'+req.method);
    });
}).listen(1400,"127.0.0.1");

然后再新建一個request_post.js

var request=require("request");
request.post('http://127.0.0.1:1400',{form:{'name':'ermu','book':'node.js'}},function (error,response,result) {
    console.log(result);
})

像上面一樣在cmd中執行后顯示的結果如下:

D:\nodejs\src\request>node request_post.js
{"name":"ermu","book":"node.js"}
POST

request post提交了一個json對象{"name":"ermu","book":"node.js"}而服務器接通過獲取該POST數據,然后返回客戶端,同時將http請求方式也響應到客戶端。

request post參數可以有兩種傳遞方式。

其中,第一種是將url和form表單的數據作為json參數在request post傳遞。舉例如下:

request.post('url':'http://127.0.0.1:1400',form:{'name':'ermu','book':'node.js'}},function (error,response,result) { console.log(result); })

另一種是將url和form作為兩個參數,上面的實例就是使用這種方法。

六、  Formidable模塊

該模塊的目的是為了解決文件上傳。

在原生的node.js模塊中,提供了獲取post數據的方法,但是並沒有直接獲取上傳文件。

 

 


免責聲明!

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



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