从零开始学习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 相关文章推荐
动态加载图片路径 保持JavaScript控件的相对独立性
Sep 03 Javascript
基于Jquery的淡入淡出的特效基础练习
Dec 13 Javascript
自己做的模拟模态对话框实现代码
May 23 Javascript
基于jquery自定义图片热区效果
Jul 21 Javascript
如何使用Javascript正则表达式来格式化XML内容
Jul 04 Javascript
纯js实现div内图片自适应大小(已测试,兼容火狐)
Jun 16 Javascript
node.js中的fs.readSync方法使用说明
Dec 17 Javascript
Node.js巧妙实现Web应用代码热更新
Oct 22 Javascript
Vue头像处理方案小结
Jul 26 Javascript
微信小程序使用canvas的画图操作示例
Jan 18 Javascript
基于Bootstrap和JQuery实现动态打开和关闭tab页的实例代码
Jun 10 jQuery
jQuery实现简单轮播图效果
Dec 27 jQuery
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面向对象全攻略 (十一)__toString()用法 克隆对象 __call处理调用错误
2009/09/30 PHP
php中stream(流)的用法
2014/03/25 PHP
php实现生成带二维码图片并强制下载功能
2018/02/24 PHP
PHP使用PDO、mysqli扩展实现与数据库交互操作详解
2019/07/20 PHP
javascript下过滤数组重复值的代码
2007/09/10 Javascript
jquery $.ajax入门应用一
2008/11/19 Javascript
JavaScript入门教程(11) js事件处理
2009/01/31 Javascript
JavaScript 无符号右移赋值操作
2009/04/17 Javascript
js弹窗代码 可以指定弹出间隔
2010/07/03 Javascript
了不起的node.js读书笔记之node.js中的特性
2014/12/22 Javascript
JS封装cookie操作函数实例(设置、读取、删除)
2015/11/17 Javascript
基于js实现微信发送好友如何分享到朋友圈、微博
2015/11/30 Javascript
JavaScript数组去重的两种方法推荐
2016/04/05 Javascript
浅谈Javascript数组(推荐)
2016/05/17 Javascript
jQuery实现级联下拉框实战(5)
2017/02/08 Javascript
JS简单实现自定义右键菜单实例
2017/05/31 Javascript
JS实现的将html转为pdf功能【基于浏览器端插件jsPDF】
2018/02/06 Javascript
关于vue组件事件属性穿透详解
2019/10/28 Javascript
vue使用better-scroll实现滑动以及左右联动
2020/06/30 Javascript
实例讲解React 组件生命周期
2020/07/08 Javascript
Python中urllib2模块的8个使用细节分享
2015/01/01 Python
python写入中英文字符串到文件的方法
2015/05/06 Python
Python遍历文件夹和读写文件的实现方法
2017/05/10 Python
python3 遍历删除特定后缀名文件的方法
2018/04/23 Python
基于python 微信小程序之获取已存在模板消息列表
2019/08/05 Python
使用Keras 实现查看model weights .h5 文件的内容
2020/06/09 Python
python如何实时获取tcpdump输出
2020/09/16 Python
基于python获取本地时间并转换时间戳和日期格式
2020/10/27 Python
CSS实现进度条和订单进度条的示例
2020/11/05 HTML / CSS
加拿大票务网站:Ticketmaster加拿大
2017/07/17 全球购物
公司放假通知范文
2015/04/14 职场文书
身份证丢失证明
2015/06/19 职场文书
2015年数学教研工作总结
2015/07/22 职场文书
Python文件的操作示例的详细讲解
2021/04/08 Python
MyBatis在注解上使用动态SQL方式(@select使用if)
2022/07/07 Java/Android
JavaScript实现音乐播放器
2022/08/14 Javascript