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


Posted in Javascript onApril 13, 2017

本文实例讲述了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);
          });
        })
      });
    });
  }
}

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

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

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

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

Javascript 相关文章推荐
基于jQuery的动态表格插件
Mar 28 Javascript
深入理解Javascript动态方法调用与参数修改的问题
Dec 10 Javascript
判断一个对象是否为jquery对象的方法
Mar 12 Javascript
javascript中定义类的方法汇总
Dec 28 Javascript
基于Vuejs实现购物车功能
Aug 02 Javascript
浅谈JQ中mouseover和mouseenter的区别
Sep 13 Javascript
读Javascript高性能编程重点笔记
Dec 21 Javascript
JS实现线性表的顺序表示方法示例【经典数据结构】
Apr 11 Javascript
vue.js element-ui tree树形控件改iview的方法
Mar 29 Javascript
基于jQuery.i18n实现web前端的国际化
May 04 jQuery
使vue实现jQuery调用的两种方法
May 12 jQuery
vue2.* element tabs tab-pane 动态加载组件操作
Jul 19 Javascript
mui上拉加载功能实例详解
Apr 13 #Javascript
从零开始学习Node.js系列教程三:图片上传和显示方法示例
Apr 13 #Javascript
JS开发中百度地图+城市联动实现实时触发查询地址功能
Apr 13 #Javascript
从零开始学习Node.js系列教程二:文本提交与显示方法
Apr 13 #Javascript
从零开始学习Node.js系列教程一:http get和post用法分析
Apr 13 #Javascript
基于Vue实现tab栏切换内容不断实时刷新数据功能
Apr 13 #Javascript
JavaScript数据结构之二叉树的计数算法示例
Apr 13 #Javascript
You might like
基于php权限分配的实现代码
2013/04/28 PHP
在PHP中使用X-SendFile头让文件下载更快
2014/06/01 PHP
解密ThinkPHP3.1.2版本之独立分组功能应用
2014/06/19 PHP
php将access数据库转换到mysql数据库的方法
2014/12/24 PHP
PHP之密码加密的几种方式
2015/07/29 PHP
php 参数过滤、数据过滤详解
2015/10/26 PHP
php中final关键字用法分析
2016/12/07 PHP
jQuery生成asp.net服务器控件的代码
2010/02/04 Javascript
jQuery选中select控件 无法设置selected的解决方法
2010/09/01 Javascript
JavaScript中的作用域链和闭包
2012/06/30 Javascript
jQuery获取CSS样式中的颜色值的问题,不同浏览器格式不同的解决办法
2013/05/13 Javascript
jQuery实现下拉加载功能实例代码
2016/04/01 Javascript
Bootstrap模仿起筷首页效果
2016/05/09 Javascript
jQuery前端开发35个小技巧
2016/05/24 Javascript
基于Angularjs实现分页功能
2016/05/30 Javascript
nodejs简单实现操作arduino
2016/09/25 NodeJs
AngularJS实现Input格式化的方法
2016/11/07 Javascript
nodejs实现发出蜂鸣声音(系统报警声)的方法
2017/01/18 NodeJs
js实现前端图片上传即时预览功能
2017/08/02 Javascript
不得不看之JavaScript构造函数及new运算符
2017/08/21 Javascript
react-native使用react-navigation进行页面跳转导航的示例
2017/09/07 Javascript
bootstrap实现点击删除按钮弹出确认框的实例代码
2018/08/16 Javascript
vue-cli3+typescript初体验小结
2019/02/28 Javascript
vue实现拖拽效果
2019/12/23 Javascript
详解JavaScript 高阶函数
2020/09/14 Javascript
python dlib人脸识别代码实例
2019/04/04 Python
K最近邻算法(KNN)---sklearn+python实现方式
2020/02/24 Python
python openpyxl模块的使用详解
2021/02/25 Python
CSS3实现超酷的黑猫警长首页
2016/04/26 HTML / CSS
质检部经理岗位职责
2014/02/19 职场文书
国旗下讲话演讲稿
2014/05/08 职场文书
汽车技术服务与贸易专业求职信
2014/07/20 职场文书
关于运动会广播稿50字
2014/10/18 职场文书
丧事酒宴答谢词
2015/09/30 职场文书
关于感恩的素材句子(38句)
2019/11/11 职场文书
VUE中的v-if与v-show区别介绍
2022/03/13 Vue.js