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 条