此例实现的功能如下图所示
计算结果
代码如下
app-node.js
var http_port = 8124; var http = require('http'); var htutil = require('./htutil'); function onRequest(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==='/mult') { require('./mult-node').get(req,res); } else { res.writeHead(404,{'Content-Type':'text/plain'}); res.end("bad URL"+req.url); } } var server = http.createServer(onRequest); server.listen(http_port); console.log('listening to http://localhost:8124');
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's</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("{title}", title,"g") .replace("[title]", title,"g") .replace("{navbar}", navbar, "g") .replace("{content}", content, "g"); }
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>") ); }
var htutil=require('./htutil'); exports.get=function(req, res) { res.writeHead(200,{'Content-Type':'text/html'}); var result=req.a*req.b; var strT="<p class='result'>{a}*{b}={result}</p>"; strT=strT.replace("{a}", req.a); strT=strT.replace("{b}", req.b); strT=strT.replace("{result}", result); var resultStr=(!isNaN(req.a)&&!isNaN(req.b))?strT:""; res.end( htutil.page("Multiplication", htutil.navbar(), [resultStr, "<p>Enter numbers to multiply</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') ) ); }square-node.js
var htutil = require('./htutil'); exports.get = function(req, res) { res.writeHead(200, { 'Content-Type': 'text/html' }); 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 a number to see its square</p>", "<form name='square' action='/square' method='get'>", "A: <input type='text' name='a' />", "</form>" ].join('\n')) ); }