首页 > 编程 > JavaScript > 正文

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

2019-11-19 16:50:21
字体:
来源:转载
供稿:网友

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

app-node.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

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();}exports.navbar = function(){  return ["<div class='navbar'>",    "<p><a href='/'>home</a></p>",    "<p><a href='/mult'>Multiplication</a></p>",    "<p><a href='/square'>Square</a></p>",    "<p><a href='/factorial'>Factorial</a></p>",    "<p><a href='/fibonacci'>Fibonacci</a></p>",    "</div>"].join('/n');}exports.page = function(title, navbar, content){  return ["<html><head><title>{title}</title></head>",    "<body><h1>{title}</h1>",    "<table><tr>",    "<td>{navbar}</td><td>{content}</td>",    "</tr></table></body></html>"    ].join('/n')    .replace(new RegExp("{title}", "gm"), title)    .replace("{navbar}", navbar)    .replace("{content}", content);}

home-node.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(), "<p>Math Wizard</p>"));}

square-node.js

var htutil = require('./htutil');exports.get = function(req, res){  res.writeHead(200, {'Content-Type': 'text/html'});  var result = req.a * req.a;  res.end(    htutil.page("Square", htutil.navbar(), [      (!isNaN(req.a) ?        ("<p class='result'>{a} squared = {sq}</p>"          .replace("{a}", req.a)          .replace("{sq}", req.a * req.a))        : ""),      "<p>Enter numbers to see its square</p>",      "<form name='square' action='/square' method='get'>",      "A: <input type='text' name='a' /><br/>",      "<input type='submit' value='Submit' />",      "</form>"    ].join('/n'))  );}

factorial-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("Factorial", htutil.navbar(), [      (!isNaN(req.a) ?        ("<p class='result'>{a} factorial = {fact}</p>"          .replace("{a}", req.a)          .replace("{fact}", math.factorial(Math.floor(req.a))))        : ""),      "<p>Enter numbers to see its factorial</p>",      "<form name='factorial' action='/factorial' method='get'>",      "A: <input type='text' name='a' /><br/>",      "<input type='submit' value='Submit' />",      "</form>"    ].join('/n'))  );}

mult-node.js

var htutil = require('./htutil');exports.get = function(req, res){  res.writeHead(200, {'Content-Type': 'text/html'});  var result = req.a * req.b;  res.end(    htutil.page("Multiplication", htutil.navbar(), [      (!isNaN(req.a) && !isNaN(req.b) ?        ("<p class='result'>{a} * {b} = {result}</p>"          .replace("{a}", req.a)          .replace("{b}", req.b)          .replace("{result}", req.a * req.b))        : ""),      "<p>Enter numbers to mutiply</p>",      "<form name='mult' action='/mult' method='get'>",      "A: <input type='text' name='a' /><br/>",      "B: <input type='text' name='b' /><br/>",      "<input type='submit' value='Submit' />",      "</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("Fibonacci", htutil.navbar(), [      (!isNaN(req.a) ?        ("<p class='result'>{a} fibonacci = {fibo}</p>"          .replace("{a}", Math.floor(req.a))          .replace("{fibo}", math.fibonacci(Math.floor(req.a))))        : ""),      "<p>Enter numbers to see its fibonacci</p>",      "<form name='fibonacci' action='/fibonacci' method='get'>",      "A: <input type='text' name='a' /><br/>",      "<input type='submit' value='Submit' />",      "</form>"    ].join('/n'))  );}

fibo2-node.js

var htutil = require('./htutil');var math = require('./math');function sendResult(req, res, a, fiboval){  res.writeHead(200, {'Content-Type': 'text/html'});  res.end(    htutil.page("Fibonacci", htutil.navbar(), [      (!isNaN(fiboval) ?        ("<p class='result'>{a} fibonacci = {fibo}</p>"          .replace("{a}", a)          .replace("{fibo}", fiboval))        : ""),      "<p>Enter numbers to see its fibonacci</p>",      "<form name='fibonacci' action='/fibonacci' method='get'>",      "A: <input type='text' name='a' /><br/>",      "<input type='submit' value='Submit' />",      "</form>"    ].join('/n'))  );}exports.get = function(req, res){  if (!isNaN(req.a)){    math.fibonacciAsync(Math.floor(req.a), function(val){      sendResult(req, res, Math.floor(req.a) ,val);    });  }else {    sendResult(req, res, NaN, NaN);  }}

math.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程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表