Node.jshtml
http://www.nodebeginner.org/index-zh-cn.htmlnode
服務器端JavaScript
要實如今後臺運行JavaScript代碼,代碼須要先被解釋而後正確的執行,這是Node.js的原理,它使用Google的V8虛擬機來解釋和執行JavaScript代碼,此外,Node.js還有許多有用的模塊,它們能夠簡化不少重複的勞做,好比向終端輸出字符串。
所以,Node.js事實上既是一個運行時環境,同時又是一個庫
應用目標:
(1)用戶能夠經過瀏覽器使用咱們的應用。
(2)當用戶請求http://domain/start時,能夠看到一個歡迎頁面,頁面上有一個文件上傳的表單。
(3)用戶能夠選擇一個圖片並提交表單,隨後文件將被上傳到http://domain/upload,該頁面完成上傳後會把圖片顯示
應用模塊:
1)須要提供Web頁面,所以須要一個HTTP服務器
2)對於不一樣的請求,根據請求的URL,咱們的服務器須要給予不一樣的響應,所以咱們須要一個路由,用於把請求對應到請求處理程序(request handler)
3)當請求被服務器接收並經過路由傳遞以後,須要能夠對其進行處理,所以咱們須要最終的請求處理程序
4)路由還應該能處理POST數據,而且把數據封裝成更友好的格式傳遞給請求處理入程序,所以須要請求數據處理功能
5)咱們不單單要處理URL對應的請求,還要把內容顯示出來,這意味着咱們須要一些視圖邏輯供請求處理程序使用,以便將內容發送給用戶的瀏覽器
6)最後,用戶須要上傳圖片,因此咱們須要上傳處理功能來處理這方面的細節
1.var http = require("http"); //請求Node.js自帶的http模塊,並賦值給變量http
http.createServer(function(request, response) {
console.log("Request received");
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello World");
response.end();
}).listen(8888);
/*調用http模塊提供的函數:createServer,這個函數會返回一個對象,該對象有一個listen方法,此方法有一個數值參數指定這個HTTP服務器監聽的端口號
當回調啓動,匿名函數被觸發的時候,有兩個參數被傳入:request和response,它們是對象,可使用它們的方法來處理HTTP請求的細節,而且響應請求(好比向發出請求的瀏覽器發回一些東西),具體的處理是:當收到請求時,使用response.writeHead()函數發送一個HTTP狀態200和HTTP頭的內容類型(content-type),使用response.write()函數在HTTP相應主體中發送文本「Hello Wrold」,最後調用response.end()完成響應。目前並沒使用request對象。*/
console.log("Server has started");
把服務器腳本放到一個叫作start的函數裏,而後導出這個函數
var http = require("http");
function start() {
function onRequest(request, response) {
console.log("Request received.");
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello World");
response.end();
}
http.createServer(onRequest).listen(8888);
console.log("Server has started.");
}
exports.start = start;
建立index.js文件並寫入:
var server = require("./server");
server.start();
//能夠像使用任何其餘的內置模塊同樣使用server模塊:請求這個文件並把它指向一個變量,其中已導出的函數就可使用了
2.處理不一樣的HTTP請求,即路由模塊,對應模塊第三點
須要爲路由提供請求的URL和其它須要的GET及POST參數,隨後路由須要根據這些數據來執行相應的代碼,所以須要查看HTTP請求,從中提取出請求的URL以及GET/POST參數。須要的全部數據都會包含在request對象中,該對象做爲onRequest()回調函數的第一個參數傳遞,爲了解析這些數據,須要額外的url和querystring Node.js模塊
以非阻塞方式操做進行請求響應
Node.js的實現方案爲 函數傳遞,到目前爲止,咱們的應用
已經能夠經過應用各層間傳遞值的方式將請求處理程序返回的內容傳遞給HTTP服務器。相對將內容傳遞給服務器的方式,此處採用將服務器「傳遞」給內容的方式。就是將response對象(從服務器的回調函數onRequest()獲取)經過請求路由傳遞給請求處理程序。隨後,處理程序就能夠採用該對象上的函數來對請求做出響應。
爲應用添加實際用途:
用戶選擇一個文件,上傳給文件,而後在瀏覽器中看到上傳的文件。
實現此功能分爲以下兩步:1.處理post請求,2使用node.js的一個用於文件上傳的外部模塊
安裝外部Node.js模塊並應用到應用中
Node.js有本身的包管理器,叫NPM,經過命令
npm install formidable 安裝模塊
將文件讀取到服務器中,使用fs模塊
npm