使用nodejs創建一個網站-重構代碼

在index.js中一開始就對文件是否存在做了判斷,在filesLoad函數中同樣做了一次判斷。重寫之後如下
//  server.js
	var config = require('./common/config');
	var http   = require('http');
	var fs     = require('fs');
	var url    = require('url');
	var path   = require('path');
	var FServer   = require('./server/FServer');
	function index(){
		function onRequest(req, res){
			// 取得文件路徑
			var pathname = url.parse(req.url).pathname;
			// 獲取文件擴展名(包含前置.)
			var extname = path.extname( pathname );
			var type = extname.slice(1);
			// 獲取下載文件在磁盤上的路徑,
			var realPath = config.root + pathname;
			if ( extname ) {
				if ( type === 'html' ) {
					realPath = config.root + '/tpl' + pathname;
				}
				FServer.filesLoad(realPath, type, req, res);
			} else {
				// ToDo
			}
		}
		http.createServer(onRequest).listen(config.port);
	 }
	exports.index = index;
代碼相比之前要簡潔的多,然而 ToDo 部分並沒有添加實質內容。只是因爲沒有確定擴展名時,不確定請求的是什麼類容,因此不能確定文件在磁盤上的真實路徑。一般來說對於沒有擴展名的請求都具有數據操作的屬性(不包括爲了SEO而重寫的url)。要完成ToDo的內容一個可行的方法是把網站所有的url列舉,讓請求與磁盤上的文件一一對應起來。例如
file = {
		'/' : config.root + '/tpl/index.html',
		'/upload' : config.root + '/tpl/upload.html'
		// 其他
	}
如此要去的文件在磁盤上的真實路徑就可以調用 file[pathname], ToDo的內容可以轉變爲:
realpath = file[pathname];
	type = path.extname( realpath );
	FServer.filesLoad(realPath, type, req, res);
如果對應的請求需要操作數據,那麼這種方法就不好使了。至於如何請求數據且聽下回分解。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章