请通过浏览器功能收藏网页

NODEJS编码特点 执行顺序 代码组织格式 javascript

发布时间:2019-02-13 13:08:20  作者:本站编辑  来源:本站原创  浏览次数:
我有话说 | 分享 |
www.javainfo.com.cn 上干货 欢迎收藏
nodejs系列:  综合练习实例 



我总结了NODEJS的代码特点: 
   顺序执行 
   非阻塞模式  
   对CPU的利用率提高到百分百  采用事件条件满足后,
   回调模式处理比较慢的步骤操作([读取文件,写文件,查询数据库,写数据库, ...])

接下来我们通过实例 来查看node的执行顺序,及代码的组织格式 

页面代码:    
    <!-- 引入layui框架 start-->
    /thirdmodels/layui-v2.4.3/layui/css/layui.css" 
    thirdmodels/layui-v2.4.3/layui/layui.js"
    <!-- 引入layui框架 end-->

	<!--数据展示列表 -->
    <div class="layui-fluid">
      <table class="layui-hide" id="listtable" lay-filter="appendTools"></table>
    </div

      //引入layui的模块
      layui.use(['table','layer','element'], function(){
        $ = layui.$
                ,table = layui.table
                ,layer = layui.layer
                ,element = layui.element
                ,form = layui.form //表单        ;

        //开始渲染 数据表格的数据
        table.render({
          elem: '#listtable'
          ,url: '/userService/pageList'
          ,method: "post"
          ,title: '用户信息表'
          ,limit:10         
          ,cols: [[ //表头
            {checkbox: true, type: 'checkbox', fixed: 'left'}
            ,{field:'id', title: 'ID', sort: true, fixed: true}
            ,{field:'name', title: '姓名', sort: true, fixed: true}
            ,{field:'age', title: '年龄', sort: true, fixed: true}
            ,{field:'flag', title: '删除标记', sort: true, fixed: true}
            ,{fixed: 'right',  align:'center', toolbar: '#gongjulan',width:250}
            ]],
        id:'testRelaod'
                ,page: true //开启分页
                ,where:{content:''}
      });
	  
	  </script>
	  
	发出对服务器的请求    /userService/pageList 
	
2  router 响应请求 并调用service层暴漏的方法
   	var express = require('express');
	var router = express.Router();
	var userService = require('../services/UserService');
	var pageModel = require('../models/PageModel');

	//得到用户分页数据的接口
	router.post('/',function (req,res,next) {
		console.log('post users pagelist  and set response type ');
		res.set('contentType','application/json');
		var pname = req.body.content;
		console.log('pname = content.txt = ' + pname)
		//调用service层 数据查询接口,并设置查询结束后的回调方法 function(data,objSumNum) 
		userService.findUserList(pname,req.body.page,req.body.limit,function (data,objSumNum) {
			console.log('router callback process data  init  ');
			if(data.length > 0){
			    //有数据   处理数据
				console.log('router callback process data  to json data ');
				var pm = new pageModel(0,'ok',objSumNum,data);
				var resString = JSON.stringify(pm);
				console.log('router callback  response jsonstr   ' + resString);
				console.log('router callback send to frontPage json info .....')
				//将整理好的数据 返回到前台界面
				res.send(resString);
			}else{
				console.log('router callback has no data router , process null data ; 
				//return null dataModel to front page  ');
				res.send(JSON.stringify(new pageModel()));
			}
		})
		console.log('router service method end ')
	})

3 service层 服务器调用DAO 层 查询数据
  //引入DAO数据库的连接
	var DbConnection = require('../utils/DbConnection');
	//引入模型数据
	var UserModel = require('../models/UserModel')
	//定义用户管理模块业务层
	function UserService() {}

	//查找用户列表信息   数据库连接采用 隐式连接方式
	//待所有的数据都查询出来后,才调用 回调函数 callback [引用模式]
	UserService.findUserList = function (pname,page,limit,callback) {
		// 得到连接对象
		console.log('findUserList enter 1 and get dbConnection ')
		var con = DbConnection.getDefaultConnection();
		//连接到数据库
		console.log('findUserList getConn OK 2 ')
		//声明存放用户信息的列表
		var userArray = new Array();
		//记录总数 记录器
		var sumObjNums = 0;
		console.log(' findUserList start query db datas 3 ')

		//第一步  获取某页的数据
		var sql = "SELECT * from nodeusers where flag = 0 limit "+limit+" offset " + limit * (page - 1);
		//我们的查询数据库  的速度是比较慢的 ,于是乎这里又添加了回调函数来处理 查询后的数据
		con.query(sql, function(err, rows, fields) {
			if (err) throw err;
			console.log('findUserList querydb result process start 4 ');
			if(rows.length > 0){
				for(var i=0; i<rows.length; i++){
					var userTemp = new UserModel(rows[i].Id,rows[i].name,rows[i].age,rows[i].flag);
					userArray.push(userTemp);
					console.log('findUserList data processing ..  5 ')
				}
				console.log('findUserList datas process ok ; to callback fun to get SUMCOUNT 6')
				// 第二步   获取当前符合条件的数据的总数
				sql =  "SELECT count(id) as sumCount from nodeusers where flag = 0 ";
				//在查询完  记录后,在查询总数目 用于分页, 这里的数据库查询速度比较慢,
				//于是乎这里又采用了回调函数处理数据
				con.query(sql, function(err, rows, fields) {
					if (err) throw err;
					console.log('findUserList  query datas count ' + rows +' 7');
					if(rows.length > 0){
						sumObjNums =  rows[0].sumCount;
						console.log('findUserList process ok , callback router 8 ');
						//当数据与记录总数获取完毕后, 反调CALLBACK 给router层函数 传递数据
						return  callback(userArray,sumObjNums);
					}
				});
			}
		});
		console.log('findUserList service end  9 ');	  
	}	  

 4 数据库连接工具 这里不再介绍,请自行封装
   系统打印顺序如下:
   //回调模式编程 异步非阻塞模式处理  其程序执行过程
    // post users pagelist  and set response type
    // pname = content.txt = findUserList enter 1 and get dbConnection
    // findUserList getConn OK 2
    // findUserList start query db datas 3
    // findUserList service end  9  //非阻塞模式 在数据库查询尚未结束的时候 已经先一步执行了 
    // router service method end    //router层的结尾打印代码 同样不需要等待查询结果的返回 可用先一步执行
    // findUserList data processing ..  5    //数据查询完毕  处理数据中 
    // findUserList data processing ..  5
    // findUserList data processing ..  5
    // findUserList data processing ..  5
    // findUserList data processing ..  5
    // findUserList datas process ok ; to callback fun to get SUMCOUNT 6
    // findUserList  query datas count [object Object] 7
    // findUserList process ok , callback router 8  //这是真正的数据处理完毕 返回到router层的 处理函数
    // router callback process data  init   //router层的 回调函数开始工作
    // router callback process data  to json data
    // router callback  response jsonstr   {"code":0,"msg":"ok","count":5,"data":[{"id":1,"name":"wangwu",
    //"age":333,"flag":0},{"id":2,"name":"lisi","age":22,"flag":0},{"id":9,"name":"ggf","age":348,"flag":0},
    //{"id":10,"name":"gf","age":43,"flag":0},{"id":12,"name":"7777","age":66,"flag":0}],"pageIndex":1}
    // router callback send to frontPage json info .....   //数据返回到界面 
    //界面对JSON数据进行处理 并展示;	
	



如有疑问 请留言 欢迎提供建议
  • 0

    开心

  • 0

    板砖

  • 0

    感动

  • 0

    有用

  • 0

    疑问

  • 0

    难过

  • 0

    无聊

  • 0

    震惊

评论已有 0