一个简单的nodeJS实现

这是目录结构
app-node.js
/**
 * @author Administrator
 * 请求的路由选择
 */
var http_port = 8124;

var http = require('http');
var htutil = require('./htutil');

var server = http.createServer( function(req, res){
	htutil.loadParams(req, res, undefined);
	if(req.requrl.pathname === '/'){
		require('./home-node').get(req, res);
	}else if(req.requrl.pathname === '/square'){
		require('./square-node').get(req, res);
	}else if(req.requrl.pathname === '/fibo'){
		require('./fibo-node').get(req, res);
	}else {
		res.writeHead(404, {'Content-Type':'text/plain'});
		res.end('bad URL ' + req.url);
	}
});

server.listen(http_port);
console.log('listening to http://localhost:8124');

home-node.js
var htutil = require('./htutil');

exports.get = function(req, res){
	res.writeHead(200, {'Content-Type':'text/html'});
	res.end(
		htutil.page('home', 
		htutil.navbar(), 
		" <p>home</p>" )
	);
}


htutil.js

/*
 * 处理URL查询参数
 */
var url = require('url');

exports.loadParams = function(req, res, next){
	req.requrl = url.parse(req.url, true);
	req.a = (req.requrl.query.a && ! isNaN(req.requrl.query.a))
		? new Number(req.requrl.query.a)
		: NaN;
	req.b = (req.requrl.query.b && !isNaN(req.requrl.query.b))
		? new Number(req.requrl.query.b)
		: NaN;
	if(next) next();
}
//这个函数提供了一个HTML片段,可以作为一个导航栏
exports.navbar = function(){
	return ["<div calss='navbar'>",
			"<p><a href='/'>home</a></p>",
			"<p><a href='/square'>square</a></p>",
			"<p><a href='/fibo'>factorial</a></p>",
			"</div>"].join('\n');
}
//这个函数对用整个页面的HTML结构
exports.page = function(title, navbar, content){
	return ["<html><head><title>{title}</title></head>",
	"<body><h1>{navbar}</h1>{content}</body></html>"].join('\n')
	.replace("{title}", title, "g")
	.replace("{navbar}", navbar, "g")
	.replace("{content}", content, "g");
}

square-node.js
//计算一个数的平方并显示

var htutil = require('./htutil');

exports.get = function(req, res){
	res.writeHead(200, {'Content-Type':'text/html'});
	res.end(
		htutil.page('square', htutil.navbar(), [
				(!isNaN(req.a)? 
					("<p>{a} aquare = {sq}</p>".replace("{a}", req.a).replace("{sq}", req.a*req.a))
					: ""
				),
				"<p>entet a number to see its square</p>",
				"<form name='square' action='./square' method='get'>",
				"A: <input type='text' name='a' />",
				"</form>"
			].join('\n'))
	);
}

fibo-node.js
var htutil = require('./htutil');
var math = require('./math');

exports.get = function(req, res){
	res.writeHead(200, {'Content-Type':'text/html'});
	res.end(
		htutil.page('square', htutil.navbar(), [
				(!isNaN(req.a)? 
					("<p>{a} fibo = {fibo}</p>".replace("{a}", Math.floor(req.a)).replace("{fibo}", math.fibonacci(Math.floor(req.a))))
					: ""
				),
				"<p>entet a number to see its fibonacci</p>",
				"<form name='fibo' action='./fibo' method='get'>",
				"A: <input type='text' name='a' />",
				"</form>"
			].join('\n'))
	);
}

math.js
var fibonacci = exports.fibonacci = function(n){
	if(n === 1)
		return 1;
	else if(n === 2)
		return 1;
	else 
		return fibonacci(n-1) + fibonacci(n-2);
}



运行结果:







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值