从零开始学习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学习笔记之基础中的基础
Jan 19 Javascript
JavaScript使用addEventListener添加事件监听用法实例
Jun 01 Javascript
JavaScript中使用Math.PI圆周率属性的方法
Jun 14 Javascript
JavaScript实现带播放列表的音乐播放器实例分享
Mar 07 Javascript
从零开始学习Node.js系列教程五:服务器监听方法示例
Apr 13 Javascript
微信小程序 图片上传实例详解
May 05 Javascript
jQuery制作全屏宽度固定高度轮播图(实例讲解)
Jul 08 jQuery
浅谈Emergence.js 检测元素可见性的 js 插件
Nov 18 Javascript
element ui table 增加筛选的方法示例
Nov 02 Javascript
js实现按钮开关单机下拉菜单效果
Nov 22 Javascript
Vue infinite update loop的问题解决
Apr 23 Javascript
jQuery 实现DOM元素拖拽交换位置的实例代码
Jul 14 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实现专业获取网站SEO信息类实例
2015/04/02 PHP
php+mysql开发中的经验与常识小结
2019/03/25 PHP
PHP实现chrome表单请求数据转换为接口使用的json数据
2021/03/04 PHP
jquery中选择块并改变属性值的方法
2013/07/31 Javascript
javascript动态判断html元素并执行不同的操作
2014/06/16 Javascript
Javascript的表单与验证-非空验证
2016/03/18 Javascript
用原生JS对AJAX做简单封装的实例代码
2016/07/13 Javascript
Angularjs2不同组件间的通信实例代码
2017/05/06 Javascript
Angular 4依赖注入学习教程之FactoryProvider配置依赖对象(五)
2017/06/04 Javascript
原生nodejs使用websocket代码分享
2018/04/07 NodeJs
JS简单实现动态添加HTML标记的方法示例
2018/04/08 Javascript
vue路由组件按需加载的几种方法小结
2018/07/12 Javascript
Vue.js递归组件实现组织架构树和选人功能案例分析
2019/07/03 Javascript
layui 弹出删除确认界面的实例
2019/09/06 Javascript
详解小程序BackgroundAudioManager踩坑之旅
2019/12/08 Javascript
jQuery实现验证用户登录
2019/12/10 jQuery
[07:47]DOTA2国际邀请赛采访专栏:探访Valve总部
2013/08/08 DOTA
Python利用多进程将大量数据放入有限内存的教程
2015/04/01 Python
介绍Python的Django框架中的静态资源管理器django-pipeline
2015/04/25 Python
Python通过正则表达式选取callback的方法
2015/07/18 Python
python高手之路python处理excel文件(方法汇总)
2016/01/07 Python
Python的Flask站点中集成xhEditor文本编辑器的教程
2016/06/13 Python
python虚拟环境virtualenv的安装与使用
2017/09/21 Python
python基础教程项目五之虚拟茶话会
2018/04/02 Python
python3模块smtplib实现发送邮件功能
2018/05/22 Python
Pytorch 保存模型生成图片方式
2020/01/10 Python
解决django 向mysql中写入中文字符出错的问题
2020/05/18 Python
python中怎么表示空值
2020/06/19 Python
python自动化发送邮件实例讲解
2021/01/04 Python
trivago美国:全球最大的酒店价格比较网站
2018/01/18 全球购物
GE设备配件:GE Appliance Parts(家电零件、配件和滤水器)
2018/11/28 全球购物
淘宝中秋节活动方案
2014/01/31 职场文书
旅游管理毕业生自荐信范文
2014/03/19 职场文书
班组长安全工作职责
2014/07/15 职场文书
女性健康知识讲座主持词
2015/07/04 职场文书
golang中的空接口使用详解
2021/03/30 Python