从零开始学习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 相关文章推荐
jquery+json实现的搜索加分页效果
Mar 31 Javascript
使用jQuery jqPlot插件绘制柱状图
Dec 18 Javascript
JS点击链接后慢慢展开隐藏着图片的方法
Feb 17 Javascript
jquery处理页面弹出层查询数据等待操作实例
Mar 25 Javascript
js给selected添加options的方法
May 06 Javascript
详解Angular 4.x NgIf 的用法
May 22 Javascript
jquery中有哪些api jQuery主要API
Nov 20 jQuery
angular4 JavaScript内存溢出问题
Mar 06 Javascript
Vue路由切换时的左滑和右滑效果示例
May 29 Javascript
Vue的watch和computed方法的使用及区别介绍
Sep 06 Javascript
node.js 基于cheerio的爬虫工具的实现(需要登录权限的爬虫工具)
Apr 10 Javascript
微信小程序搭建自己的Https服务器
May 02 Javascript
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手册及PHP编程标准
2006/12/17 PHP
php 前一天或后一天的日期
2008/06/28 PHP
一个简单php扩展介绍与开发教程
2010/08/19 PHP
PHP制作图形验证码代码分享
2014/10/23 PHP
PHP将HTML转换成文本的实现代码
2015/01/21 PHP
微信API接口大全
2015/04/15 PHP
Yii2.0 RESTful API 基础配置教程详解
2018/12/26 PHP
用JQuery实现表格隔行变色和突出显示当前行的代码
2012/02/10 Javascript
js自定义回调函数
2015/12/13 Javascript
JS实现alert中显示换行的方法
2015/12/17 Javascript
js验证框架实现代码分享
2016/05/18 Javascript
JavaScript排序算法动画演示效果的实现方法
2016/10/18 Javascript
jQuery实现动态添加tr到table的方法
2016/12/26 Javascript
jquery实现百叶窗效果
2017/01/12 Javascript
vue bootstrap小例子一枚
2017/06/09 Javascript
微信小程序上传图片到服务器实例代码
2017/11/07 Javascript
vue-cli axios请求方式及跨域处理问题
2018/03/28 Javascript
微信小程序wx.uploadfile 本地文件转base64的实现代码
2018/06/28 Javascript
JS数组属性去重并校验重复数据
2020/01/10 Javascript
使用python实现递归版汉诺塔示例(汉诺塔递归算法)
2014/04/08 Python
python批量查询、汉字去重处理CSV文件
2018/05/31 Python
详解Python用三种方式统计词频的方法
2019/07/29 Python
Python迭代器iterator生成器generator使用解析
2019/10/24 Python
tensorflow将图片保存为tfrecord和tfrecord的读取方式
2020/02/17 Python
PyInstaller运行原理及常用操作详解
2020/06/13 Python
python读取图像矩阵文件并转换为向量实例
2020/06/18 Python
python如何使用腾讯云发送短信
2020/09/17 Python
canvas实现扭蛋机动画效果的示例代码
2018/10/17 HTML / CSS
小学后勤管理制度
2014/01/14 职场文书
2014年幼儿园元旦活动方案
2014/02/13 职场文书
3.15国际消费者权益日主题活动活动总结
2014/03/16 职场文书
建筑安全责任书范本
2014/07/24 职场文书
普通党员群众路线教育实践活动心得体会
2014/11/04 职场文书
学校安全管理制度
2015/08/06 职场文书
Windows 64位 安装 mysql 8.0.28 图文教程
2022/04/19 MySQL
源码安装apache脚本部署过程详解
2022/09/23 Servers