从零开始学习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高级程序设计 读书笔记之十一 内置对象Global
Mar 07 Javascript
JavaScript 上万关键字瞬间匹配实现代码
Jul 07 Javascript
jQuery中RadioButtonList的功能及用法实例介绍
Aug 23 Javascript
js判断手机端(Android手机还是iPhone手机)
Jul 22 Javascript
JavaScript SHA512&amp;SHA256加密算法详解
Aug 11 Javascript
详解js跨域原理以及2种解决方案
Dec 09 Javascript
Jquery 整理元素选取、常用方法一览表
Nov 26 Javascript
JavaScript简单计算人的年龄示例
Apr 15 Javascript
vue打包后显示空白正确处理方法
Nov 01 Javascript
小程序数据通信方法大全(推荐)
Apr 15 Javascript
Vue如何实现监听组件原生事件
Jul 03 Javascript
Postman参数化实现过程及原理解析
Aug 13 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
ThinkPHP登录功能的实现方法
2014/08/20 PHP
ucenter通信原理分析
2015/01/09 PHP
JavaScript 异步调用框架 (Part 5 - 链式实现)
2009/08/04 Javascript
Jquery Ajax学习实例 向页面发出请求,返回XML格式数据
2010/03/14 Javascript
一个挺有意思的Javascript小问题说明
2011/09/26 Javascript
修复ie8&amp;chrome下window的resize事件多次执行
2011/10/20 Javascript
jquery中的事件处理详细介绍
2013/06/24 Javascript
JS求平均值的小例子
2013/11/29 Javascript
javascript 获取HTML DOM父、子、临近节点
2014/06/16 Javascript
js使用正则实现ReplaceAll全部替换的方法
2014/08/22 Javascript
JavaScript获取页面中超链接数量的方法
2015/11/09 Javascript
js实现商城星星评分的效果
2015/12/29 Javascript
javascript如何实现360度全景照片问题汇总
2016/04/04 Javascript
详解从angular-cli:1.0.0-beta.28.3升级到@angular/cli:1.0.0
2017/05/22 Javascript
解决bootstrap下拉菜单点击立即隐藏bug的方法
2017/06/13 Javascript
详解刷新页面vuex数据不消失和不跳转页面的解决
2018/01/30 Javascript
JS实现的合并多个数组去重算法示例
2018/04/11 Javascript
vue.js 实现点击按钮动态添加li的方法
2018/09/07 Javascript
layer的prompt弹出框,点击回车,触发确定事件的方法
2019/09/06 Javascript
vue 动态创建组件的两种方法
2020/12/31 Vue.js
pandas 实现将重复表格去重,并重新转换为表格的方法
2018/04/18 Python
python实现关键词提取的示例讲解
2018/04/28 Python
Python中pillow知识点学习
2018/04/30 Python
详解Python3序列赋值、序列解包
2019/05/14 Python
如何基于python实现脚本加密
2019/12/28 Python
Python request post上传文件常见要点
2020/11/20 Python
详解使用canvas保存网页为pdf文件支持跨域
2018/11/23 HTML / CSS
详解移动端HTML5音频与视频问题及解决方案
2018/08/22 HTML / CSS
利用promise及参数解构封装ajax请求的方法
2021/03/24 Javascript
前处理组长岗位职责
2014/03/01 职场文书
政府法律服务方案
2014/06/14 职场文书
居委会个人对照检查材料思想汇报
2014/09/29 职场文书
质量保证书格式模板
2015/02/27 职场文书
2015年中秋寄语
2015/07/31 职场文书
护士工作心得体会
2016/01/25 职场文书
三好学生竞选稿范文
2019/08/21 职场文书