node.js構建http服務器(一)

最近對node.js產生了興趣,碰巧公司決定技術革新。在此把學習中的一些過程記錄下
css

對於怎樣安裝node、環境搭建等基礎內容暫不作介紹,有時間也會分享html

在node中建立HTTP服務器是很輕鬆的,大概須要4個步驟,下面我一一分解node

  1. 獲取http模塊web

    var http = require('http');
  2. 建立http服務瀏覽器

    var server = http.createServer();
  3. 監聽服務請求事件(request)
    服務器

    server.on('request', function(req, res){
        res.writeHead(200,{'Content-Type':'text/plain'});
        res.write('Hello Word!');
        res.end();
    });
  4. 將服務綁定到TCP端口,如:4000函數

    server.listen(4000)

將以上代碼保存在server.js文件中,使用命令node server.js啓動服務,在瀏覽器中輸入http://loaclhost:4000能夠看到Hello Word!post

經過上面的代碼能夠搭建一個能夠運行的http服務,經過對上面代碼的擴展咱們能夠搭建一個能夠運行web的服務,也就是中間件(web容器)了學習

  • 首先,完善項目目錄ui

    webroot就是存放web資源的目錄,能夠放web項目在裏面,根據實現不一樣存放方式及項目類型也有所不一樣。其餘目錄就很少講了

  • 其次,擴展server.js代碼

    var fs = require('fs'),
        path = require('path');
    require('http').createServer(function(req, res) {
    
    	var uri = req.url
    	if (uri == "/" || uri == "") {
    		uri = "/index.html"
    	} else {
    		if(uri.indexOf('?') != -1){
    		    uri = uri.substr('0',uri.indexOf('?'))//截取url參數部分
    		}
    	}
    	
    	var file = path.normalize('./webroot' + uri);
    	console.log('Trying to serve', file);
    
    	/**
    	 * 定義服務端未知異常回調函數
    	 */
    	function reportError(err) {
    		console.log(err);
    		res.writeHead(500);
    		res.end('Internal Server Error');
    	}
    
    	path.exists(file, function(exists) {
    		if (exists) {
    			fs.stat(file, function(err, stat) {
    				var rs;
    				if (err) {
    					return reportError(err);
    				}
    				if (stat.isDirectory()) {
    					res.writeHead(403);
    					res.end('Forbidden')
    				} else {
    					rs = fs.createReadStream(file);
    					rs.on('error',reportError);
    					var postfix = uri.substr(uri.lastIndexOf('.')); //取url後綴
    					if (postfix.indexOf('html') != -1) {
    						res.writeHead(200, {
    							'Content-Type': 'text/html'
    						});
    					}else{
    						res.writeHead(200);
    					}
    					rs.pipe(res);
    				}
    			})
    		} else {
    			//404錯誤
    			res.writeHead(404);
    			res.end('Not found')
    		}
    	})
    
    }).listen(4000, function() {
    	console.log('http server port 4000');
    });
  • 最後,完善html資源部份內容,能夠加一些css、js、圖片後訪問看看效果

    訪問http://loaclhost:4000效果

    控制檯輸出內容

好了node構建http服務器告一段落,如今已經能夠拿node作一個簡單的web應用了,根據node的一些特性,根據如今的內容,進一步思考就能夠實現一個能夠交互的web;

相關文章
相關標籤/搜索