使用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);
如果对应的请求需要操作数据,那么这种方法就不好使了。至于如何请求数据且听下回分解。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值