从零开始学习Node.js系列教程四:多页面实现的数学运算示例

本文实例讲述了Node.js多页面实现的数学运算。分享给大家供大家参考,具体如下:

app-node.js

rush:js;"> var http_port = 3000; 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 === '/factorial'){ require('./factorial-node').get(req,res); }else if (req.requrl.pathname === '/fibonacci'){ require('./fibo-node').get(req,res); }else if (req.requrl.pathname === '/mult'){ require('./mult-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:3000');

htutil.js

rush:js;"> var url = require('url'); exports.loadParams = function(req,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(); } exports.navbar = function(){ return [""].join('\n'); } exports.page = function(title,navbar,content){ return ["{title}","

{title}

","" ].join('\n') .replace(new RegExp("{title}","gm"),title) .replace("{navbar}",navbar) .replace("{content}",content); }

home-node.js

rush:js;"> var htutil = require('./htutil'); exports.get = function(req,res){ res.writeHead(200,{'Content-Type': 'text/html'}); res.end(htutil.page("Math Wizard",htutil.navbar(),"

Math Wizard

")); }

square-node.js

rush:js;"> var htutil = require('./htutil'); exports.get = function(req,{'Content-Type': 'text/html'}); var result = req.a * req.a; res.end( htutil.page("Square",[ (!isNaN(req.a) ? ("

{a} squared = {sq}

" .replace("{a}",req.a) .replace("{sq}",req.a * req.a)) : ""),"

Enter numbers to see its square

","
","A:
","","
" ].join('\n')) ); }

factorial-node.js

rush:js;"> var htutil = require('./htutil'); var math = require('./math'); exports.get = function(req,{'Content-Type': 'text/html'}); res.end( htutil.page("Factorial",[ (!isNaN(req.a) ? ("

{a} factorial = {fact}

" .replace("{a}",req.a) .replace("{fact}",math.factorial(Math.floor(req.a)))) : ""),"

Enter numbers to see its factorial

","
","
" ].join('\n')) ); }

mult-node.js

rush:js;"> var htutil = require('./htutil'); exports.get = function(req,{'Content-Type': 'text/html'}); var result = req.a * req.b; res.end( htutil.page("Multiplication",[ (!isNaN(req.a) && !isNaN(req.b) ? ("

{a} * {b} = {result}

" .replace("{a}",req.a) .replace("{b}",req.b) .replace("{result}",req.a * req.b)) : ""),"

Enter numbers to mutiply

","
","B:
","
" ].join('\n')) ); }

fibo-node.js

rush:js;"> var htutil = require('./htutil'); var math = require('./math'); exports.get = function(req,{'Content-Type': 'text/html'}); res.end( htutil.page("Fibonacci",[ (!isNaN(req.a) ? ("

{a} fibonacci = {fibo}

" .replace("{a}",Math.floor(req.a)) .replace("{fibo}",math.fibonacci(Math.floor(req.a)))) : ""),"

Enter numbers to see its fibonacci

","
","
" ].join('\n')) ); }

fibo2-node.js

rush:js;"> var htutil = require('./htutil'); var math = require('./math'); function sendResult(req,a,fiboval){ res.writeHead(200,[ (!isNaN(fiboval) ? ("

{a} fibonacci = {fibo}

" .replace("{a}",a) .replace("{fibo}",fiboval)) : ""),"" ].join('\n')) ); } exports.get = function(req,res){ if (!isNaN(req.a)){ math.fibonacciAsync(Math.floor(req.a),function(val){ sendResult(req,Math.floor(req.a),val); }); }else { sendResult(req,NaN,NaN); } }

math.js

rush:js;"> var factorial = exports.factorial = function(n){ if (n == 0) return 1; else return n * factorial(n-1); } 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); } var fibonacciAsync = exports.fibonacciAsync = function(n,done){ if (n ==1 || n == 2) done(1); else { process.nextTick(function(){ fibonacciAsync(n-1,function(val1){ process.nextTick(function(){ fibonacciAsync(n-2,function(val2){ done(val1 + val2); }); }) }); }); } }

希望本文所述对大家nodejs程序设计有所帮助。

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...