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 条