1、Express框架javascript
前面的章節已經介紹過了,可使用npm來安裝node.js模塊。具體操做請參照之前寫的nodejs概論。php
Express是一個nodejs的web開源框架,用於快速的搭建web項目。其主要集成了web的http服務器的建立、靜態文本管理、服務器URL地址請求處理、get和post請求處理分發、session處理等功能。html
使用方法,在cmd中打開你所想建立web項目的路徑。而後輸入前端
Express appname
便可建立一個名爲appname的web項目。控制檯打印結果java
在cmd中進入appname文件夾輸入node
node appname.js
返回結果以下圖,表示安裝成功!web
在項目開發中常常會出現這樣的問題express
此錯誤表示沒有安裝相關模塊,解決辦法是在cmd上打開項目文件夾,輸入npm
npm install express
安裝成功後會在本文件路徑下生成一個node_modules,裏面包含了Express框架代碼。json
其餘模塊也可用相似的方法進行安裝,安裝後的路徑一樣是在node_modules下。
2、jade模塊
jade是一款高性能、簡潔易懂的模板引擎。可經過jade來編寫html文件。
jade相似一個用於快速編寫html的語言,其編寫後的文件後綴爲.jade。
如下爲文件的內容
在cmd中輸入,壓縮的過的能夠經過加-P來不壓縮,若是每次更改模版都要打命令行一次很麻煩是否是,咱們能夠經過加上jade -P -w jade.jade 加上一個-w來開啓監視模式,每次更改模版,html文件都會自動編譯咯
生成後的html文件以下:
在jada文件中是可使用for循環和if判斷語句的,可讓你體會相似JSP的<%%>和php的<php></php>在網頁上輸出數據的快感。
3、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模塊使用。
4、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
5、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做爲兩個參數,上面的實例就是使用這種方法。
6、 Formidable模塊
該模塊的目的是爲了解決文件上傳。
在原生的node.js模塊中,提供了獲取post數據的方法,可是並無直接獲取上傳文件。