本文实例讲述了Node.js基于connect和express框架的多页面实现数学运算。分享给大家供大家参考,具体如下:
1、使用connect框架
.use方法用于绑定中间件到connect服务器,它会配置一系列在接到请求时调用的中间件模块,此例中我们要配置的中间件有favicon logger static router
app.get/post/put 写法:app.requestName('path', function(req, res, next){});
app-connect.js
var connect = require('connect'); //npm install connect connect.createServer() .use(connect.favicon()) .use(conect.logger()) .use('/filez', connect.static(__dirname + '/filez')) .use(connect.router(function(app){ app.get('/', require('./home-node').get); //一个URL字符串和两个函数类型的参数 //路由器配置函数可以包含不限数量的函数,你可以为自己的应用构造一个处理函数的队列 app.get('/square', htutil.loadParams, require('./square-node').get); app.get('/factorial', htutil.loadParams, require('./factorial-node').get); app.get('/fibonacci', htutil.loadParams, require('./fibo2-node').get); app.get('/mult', htutil.loadParams, require('./mult-node').get); })).listen(3000); console.log('listening to http://localhost:3000');
2、使用express框架
Express框架是一个基于connect(一个中间件框架)的web应用框架
Express专注于构建一个应用,包括提供一个模板系统;connect专注于做web服务的基础设施
安装Express和EJS(模块处理系统) npm install express ejs
app-express.js
var htutil = require('./htutil'); var math = require('./math'); var express = require('express'); //var app = express.createServer(express.logger()); //express 2.X var app = express(); //express 3.X //可选,因为Express下默认为CWD/views app.set('views', __dirname + '/views'); app.engine('.html', require('ejs').__express); app.set('view engine', 'ejs'); app.configure(function(){ app.use(app.router); app.use(express.static(__dirname + '/filez')); //默认的错误处理函数,显示栈轨迹 //如果要显示用户友好的错误,app.err(function(err, req, res, next){ // res.send(error page); //or res.render('template'); // }); app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); /* 改成下面的话,浏览器会显示一个简单的消息-Internal Server Error内部服务器错误 app.use(express.errorHandler({ dumpExceptions: true })); */ }); //以上配置了必需的中间件,因为这里展示的配置项对应的是模板系统的配置,所有.html文件会由EJS引擎处理 //以下是路由器配置 app.get('/', function(req, res){ res.render('home.html', {title: "Math Wizard"}); }); app.get('/mult', htutil.loadParams, function(req, res){ if (req.a && req.b) req.result = req.a * req.b; res.render('mult.html', {title: "Math Wizard", req: req}); }); app.get('/square', htutil.loadParams, function(req, res){ if (req.a) req.result = req.a * req.a; res.render('square.html', {title: "Math Wizard", req: req}); }); app.get('/fibonacci', htutil.loadParams, function(req, res){ if (req.a){ math.fibonacciAsync(Math.floor(req.a), function(val){ req.result = val; res.render('fibo.html', {title: "Math Wizard", req: req}); }); }else { res.render('fibo.html', {title: "Math Wizard", req: req}); } }); app.get('/factorial', htutil.loadParams, function(req, res){ if (req.a) req.result = math.factorial(req.a); res.render('factorial.html', {title: "Math Wizard", req: req}); }); app.get('/404', function(req, res){ res.send('NOT FOUND' + req.url); }); //res.render函数通过一个模板文件渲染数据,EJS只是Express里众多模板引擎中的一个 //配置目的是让EJS能够为views目录下的所有.html文件服务 /*Express里还有其他一些模板引擎 res.render('index.haml', {..data..}); 使用Haml res.render('index.jade', {..data..}); 使用Jade res.render('index.ejs', {..data..}); 使用EJS res.render('index.coffee', {..data..}); 使用CoffeeKup res.render('index.jqtpl', {..data..}); 使用jQueryTemplates 也可以通过 app.set('view engine', 'haml'); app.set('view engine', 'jade'); 方法来改变默认的渲染引擎 layout.html 默认情况下,模板中用于渲染的内容会被命名为body,然后传递到layout模板中,当app-express.js调用 res.render('fibo.html'...)时,它会先用fibo.html渲染对应的页面片段,然后再使用layout模板渲染整个页面 有两种方法覆盖这一默认的行为 1、在Express里创建一个全局的配置,通过这个全局配置来控制layout模板的启用与禁用 app.set('view options', {layout: false(or true)}); 2、覆盖layout模板对应的渲染方式或者使用不同的layout模板 res.render('myview.ejs', {layout: false(or true)}); 或者res.render('page', {layout: 'mylayout.jade'}); <% code %> Javascript代码 <%= code %> 显示替换过HTML特殊字符的内容 <%- code %> 显示原始HTML内容 */ app.listen(3000); console.log('listening to http://localhost:3000');
html页面放在views目录下
layout.html
<!DOCTYPE html> <html> <head> <title></title> </head> <body> <h1><%=title%></h1> <table> <tr> <td> <div class="navbar"> <p><a href="/" rel="external nofollow" >home</a></p> <p><a href="/mult" rel="external nofollow" >Multiplication</a></p> <p><a href="/square" rel="external nofollow" >Square</a></p> <p><a href="/factorial" rel="external nofollow" >Factorial</a></p> <p><a href="/fibonacci" rel="external nofollow" >Fibonacci</a></p> </div> </td> <td></td> </tr> </table> </body> </html>
home.html
<% include layout.html %> <p>Math Wizard</p>
mult.html
<% include layout.html %> <% if (req.a && req.b){ %> <p class="result"> <%=req.a%> * <%=req.b%> = <%=req.result%> </p> <% } %> <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" /> <input type="submit" name="Submit" /> </form>
还有其他一些页面就不一一列出来了,都大同小异
希望本文所述对大家nodejs程序设计有所帮助。
华山资源网 Design By www.eoogi.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
华山资源网 Design By www.eoogi.com
暂无评论...
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
2024年11月19日
2024年11月19日
- 齐秦《辉煌30年24K珍藏版》2CD[WAV+CUE]
- 证声音乐图书馆《海风摇曳·盛夏爵士曲》[FLAC/分轨][321.47MB]
- 群星 《世界经典汽车音乐》 [WAV分轨][1G]
- 冷漠.2011 《冷漠的爱DSD》[WAV+CUE][1.2G]
- 陈明《流金岁月精逊【中唱】【WAV+CUE】
- 群星《Jazz-Ladies1-2爵士女伶1-2》HQCD/2CD[原抓WAV+CUE]
- 群星《美女私房歌》(黑胶)[WAV分轨]
- 郑源.2009《试音天碟》24BIT-96KHZ[WAV+CUE][1.2G]
- 飞利浦试音碟 《环球群星监听录》SACD香港版[WAV+CUE][1.1G]
- 车载音乐最强享受《车载极致女声精选CD》[WAV分轨][1G]
- 童宇.2024-爱情万年历【TOUCH音乐】【FLAC分轨】
- 黄晓君.2010-丽风金典系列VOL.1.2CD【丽风】【WAV+CUE】
- 黄晓君.2011-丽风金典系列VOL.2【丽风】【WAV+CUE】
- 群星1992《天碟国语金曲精选》香港首版[WAV+CUE][1G]
- 萧敬腾《王妃》台湾首版[WAV分轨][1G]