從零開(kāi)始學(xué)習(xí)Node.js系列教程四:多頁(yè)面實(shí)現(xiàn)的數(shù)學(xué)運(yùn)算示例
本文實(shí)例講述了Node.js多頁(yè)面實(shí)現(xiàn)的數(shù)學(xué)運(yùn)算。分享給大家供大家參考,具體如下:
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} * = {result}</p>" .replace("{a}", req.a) .replace("", 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); }); }) }); }); } }
希望本文所述對(duì)大家nodejs程序設(shè)計(jì)有所幫助。
- 從零開(kāi)始學(xué)習(xí)Node.js系列教程之設(shè)置HTTP頭的方法示例
- 從零開(kāi)始學(xué)習(xí)Node.js系列教程之SQLite3和MongoDB用法分析
- 從零開(kāi)始學(xué)習(xí)Node.js系列教程六:EventEmitter發(fā)送和接收事件的方法示例
- 從零開(kāi)始學(xué)習(xí)Node.js系列教程五:服務(wù)器監(jiān)聽(tīng)方法示例
- 從零開(kāi)始學(xué)習(xí)Node.js系列教程四:多頁(yè)面實(shí)現(xiàn)數(shù)學(xué)運(yùn)算的client端和server端示例
- 從零開(kāi)始學(xué)習(xí)Node.js系列教程之基于connect和express框架的多頁(yè)面實(shí)現(xiàn)數(shù)學(xué)運(yùn)算示例
- 從零開(kāi)始學(xué)習(xí)Node.js
相關(guān)文章
node學(xué)習(xí)筆記之讀寫(xiě)文件與開(kāi)啟第一個(gè)web服務(wù)器操作示例
這篇文章主要介紹了node學(xué)習(xí)筆記之讀寫(xiě)文件與開(kāi)啟第一個(gè)web服務(wù)器操作,結(jié)合實(shí)例形式分析了nodejs文件讀寫(xiě)及創(chuàng)建web服務(wù)接收request請(qǐng)求與處理相關(guān)操作技巧,需要的朋友可以參考下2019-05-05Nodejs alpine基礎(chǔ)之docker鏡像構(gòu)建
這篇文章主要為大家介紹了Nodejs alpine基礎(chǔ)之docker鏡像構(gòu)建,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07node.js中的http.response.setHeader方法使用說(shuō)明
這篇文章主要介紹了node.js中的http.response.setHeader方法使用說(shuō)明,本文介紹了http.response.setHeader的方法說(shuō)明、語(yǔ)法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下2014-12-12nodejs控制臺(tái)打印高亮代碼的實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于nodejs控制臺(tái)打印高亮代碼的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05NodeJs讀取JSON文件格式化時(shí)的注意事項(xiàng)
本文是作者在進(jìn)行NodeJs開(kāi)發(fā)時(shí)偶然發(fā)現(xiàn)的問(wèn)題,經(jīng)過(guò)一番努力,最終找到解決方案,分享給大家,有需要的小伙伴可以參考下2016-09-09新手必須知的Node.js 4個(gè)JavaScript基本概念
本文介紹了4個(gè)基本JavaScript概念,它是你學(xué)習(xí)node.js所必需要掌握,下面就讓我們來(lái)看一下具體是哪4個(gè)基本JavaScript概念2018-09-09Node實(shí)現(xiàn)搜索框進(jìn)行模糊查詢
這篇文章主要為大家詳細(xì)介紹了Node實(shí)現(xiàn)搜索框進(jìn)行模糊查詢,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06