从零开始学习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 02 Javascript
getElementByIdx_x js自定义getElementById函数
Jan 24 Javascript
JS如何将数字类型转化为没3个一个逗号的金钱格式
Jan 27 Javascript
详解js树形控件—zTree使用总结
Dec 28 Javascript
详解使用Vue.Js结合Jquery Ajax加载数据的两种方式
Jan 10 Javascript
AngularJS路由切换实现方法分析
Mar 17 Javascript
深入理解JavaScript创建对象的多种方式以及优缺点
Jun 01 Javascript
JS声明对象时属性名加引号与不加引号的问题及解决方法
Feb 16 Javascript
vue2单元测试环境搭建
May 24 Javascript
使用jquery-easyui的布局layout写后台管理页面的代码详解
Jun 19 jQuery
基于vue实现探探滑动组件功能
May 29 Javascript
Vue接口封装的完整步骤记录
May 14 Vue.js
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
php4的session功能评述(二)
2006/10/09 PHP
ECshop 迁移到 PHP7版本时遇到的兼容性问题
2016/02/15 PHP
微信第三方登录(原生)demo【必看篇】
2017/05/26 PHP
TP5框架页面跳转样式操作示例
2020/04/05 PHP
JQuery Highcharts 动态生成图表的方法
2013/11/15 Javascript
JS和JQUERY获取页面大小,滚动条位置,元素位置(示例代码)
2013/12/14 Javascript
Javascript 拖拽雏形(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
jquery.map()方法的使用详解
2015/07/09 Javascript
JavaScript学习笔记之检测客户端类型是(引擎、浏览器、平台、操作系统、移动设备)
2015/12/03 Javascript
jQuery封装的屏幕居中提示信息代码
2016/06/08 Javascript
Bootstrap BootstrapDialog使用详解
2017/02/17 Javascript
JS开发 富文本编辑器TinyMCE详解
2019/07/19 Javascript
vue组件命名和props命名代码详解
2019/09/01 Javascript
jquery ajax 请求小技巧实例分析
2019/11/11 jQuery
js实现点击生成随机div
2020/01/16 Javascript
[05:15]DOTA2英雄梦之声_第16期_灰烬之灵
2014/06/21 DOTA
python中关于时间和日期函数的常用计算总结(time和datatime)
2013/03/08 Python
初学Python实用技巧两则
2014/08/29 Python
python字符串str和字节数组相互转化方法
2017/03/18 Python
Android 兼容性问题:java.lang.UnsupportedOperationException解决办法
2017/03/19 Python
pygame实现弹力球及其变速效果
2017/07/03 Python
python 划分数据集为训练集和测试集的方法
2018/12/11 Python
如何更优雅地写python代码
2019/07/02 Python
PowerBI和Python关于数据分析的对比
2019/07/11 Python
np.newaxis 实现为 numpy.ndarray(多维数组)增加一个轴
2019/11/30 Python
python进程的状态、创建及使用方法详解
2019/12/06 Python
Django中使用MySQL5.5的教程
2019/12/18 Python
pytorch实现mnist分类的示例讲解
2020/01/10 Python
python GUI库图形界面开发之PyQt5计数器控件QSpinBox详细使用方法与实例
2020/02/28 Python
利用Python脚本批量生成SQL语句
2020/03/04 Python
Python使用xpath实现图片爬取
2020/09/16 Python
英国顶级家庭折扣店:The Works
2017/09/06 全球购物
cf战队收人广告词
2014/03/14 职场文书
工作推荐信范文
2014/05/10 职场文书
年会邀请函的格式及范文五篇
2019/11/02 职场文书
总结Pyinstaller打包的高级用法
2021/06/28 Python