从零开始学习Node.js系列教程之基于connect和express框架的多页面实现数学运算示例


Posted in Javascript onApril 13, 2017

本文实例讲述了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程序设计有所帮助。

Javascript 相关文章推荐
通过百度地图获取公交线路的站点坐标的js代码
May 11 Javascript
javascript简单实现表格行间隔显示颜色并高亮显示
Nov 29 Javascript
javascript实现的一个带下拉框功能的文本框
May 08 Javascript
js对象基础实例分析
Jan 13 Javascript
AspNet中使用JQuery上传插件Uploadify详解
May 20 Javascript
微信小程序实现手势图案锁屏功能
Jan 30 Javascript
详解easyui基于 layui.laydate日期扩展组件
Jul 18 Javascript
JavaScript实现无限级递归树的示例代码
Mar 29 Javascript
JavaScript 性能提升之路(推荐)
Apr 10 Javascript
vue element和nuxt的使用技巧分享
Jan 14 Vue.js
vue+element table表格实现动态列筛选的示例代码
Jan 14 Vue.js
vue 数字翻牌器动态加载数据
Apr 20 Vue.js
MUI 解决动态列表页图片懒加载再次加载不成功的bug问题
Apr 13 #Javascript
MUI  Scroll插件的使用详解
Apr 13 #Javascript
MUI 上拉刷新/下拉加载功能实例代码
Apr 13 #Javascript
从零开始学习Node.js系列教程四:多页面实现的数学运算示例
Apr 13 #Javascript
mui上拉加载功能实例详解
Apr 13 #Javascript
从零开始学习Node.js系列教程三:图片上传和显示方法示例
Apr 13 #Javascript
JS开发中百度地图+城市联动实现实时触发查询地址功能
Apr 13 #Javascript
You might like
PHP error_log()将错误信息写入一个文件(定义和用法)
2013/10/25 PHP
PHP实现文件下载断点续传详解
2014/10/15 PHP
php操作redis常见方法示例【key与value操作】
2020/04/14 PHP
Javascript 变量作用域 两个可能会被忽略的小特性
2010/03/23 Javascript
jquery 倒计时效果实现秒杀思路
2013/09/11 Javascript
AngularJS基础学习笔记之控制器
2015/05/10 Javascript
jquery任意位置浮动固定层插件用法实例
2015/05/29 Javascript
AngularJS ng-change 指令的详解及简单实例
2016/07/30 Javascript
JS正则表达式判断有效数实例代码
2017/03/13 Javascript
JavaScript数据结构之数组的表示方法示例
2017/04/12 Javascript
vue实现前进刷新后退不刷新效果
2018/01/26 Javascript
javascript回调函数详解
2018/02/06 Javascript
Vue项目中使用Vux的安装过程
2018/05/01 Javascript
JavaScript编写开发动态时钟
2020/07/29 Javascript
详解JavaScript自定义函数
2020/07/29 Javascript
Python自定义函数的创建、调用和函数的参数详解
2014/03/11 Python
Python HTTP客户端自定义Cookie实现实例
2017/04/28 Python
Python导入模块时遇到的错误分析
2017/08/30 Python
python实现对excel进行数据剔除操作实例
2017/12/07 Python
python实现Floyd算法
2018/01/03 Python
Python3一行代码实现图片文字识别的示例
2018/01/15 Python
解决python打不开文件(文件不存在)的问题
2019/02/18 Python
解决python有时候import不了当前的包问题
2019/08/28 Python
使用OpenCV实现仿射变换—旋转功能
2019/08/29 Python
python实现拼接图片
2020/03/23 Python
10分钟入门CSS3 Animation
2018/12/25 HTML / CSS
阿里巴巴的Oracle DBA笔试题答案-SQL tuning类
2016/04/03 面试题
军训 自我鉴定
2014/02/03 职场文书
运动会入场词100字
2014/02/06 职场文书
法制宣传月活动方案
2014/05/11 职场文书
模具专业自荐信
2014/05/29 职场文书
网站出售协议书范文
2014/10/10 职场文书
北京故宫导游词
2015/01/31 职场文书
2015团员个人年度总结
2015/11/24 职场文书
OpenCV实现普通阈值
2021/11/17 Java/Android
Mysql查询时间区间日期列表,不会由于数据表数据影响
2022/04/19 MySQL