最近学习了node.js,使用node.js写了一个超市管理系统的项目,接下来我对项目中用到的一些技术总结一下。
我的项目主要运用bootstrap + express进行搭建,后台运用MongoDB数据库,实现了基本的增、删、改、查、分页等功能。Bootstrap是简洁、直观、强悍的前端开发框架,让web开发更迅速、简单,我的项目页面较多,采用bootstrap框架,大大减少了工作量,而Express 是一个非常流行的node.js的web框架。基于connect(node中间件框架)。提供了很多便于处理http请求等web开发相关的扩展。在我的项目中,页面的路由,数据的前后端交互,都采用express框架,让自己的项目结构变得十分清晰,并且数据处理的难度也大大降低。
在做项目的过程中,遇到了好几处困难,比如,登录后数据的存储以及展示,密码的修改等等,但是给我印象最深的就是在数据查询的分页中数据显示的问题,数据太多的话,就要进行分页,但是页面跳转时会刷新已有的查询,经过我的努力,想到了一个方法,代码如下:
router.get('/search',(req,res)=>{
//console.log(req.query)
res.send(req.url.split('?')[1]);
})
在search页面中获取到路径,取到?后面的具体的值,传到查询列表页,就解决了上述问题。
router.get('/billSearch',(req,res)=>{
//数据总条数
var count = 0;
//每页展示的数量
var size = 5;
//总页数
var page = 0;
//页码
var pageNum = req.query.pageNum;
console.log(req.url)
mongodb.connect(db_str,(err,database)=>{
database.collection('bill',(err,coll)=>{
console.log(req.query.billId)
async.series([
function(callback){ coll.find({billId:req.query.billId}).toArray((err,data)=>{ //对页码总页数,信息的判断
//赋值
count = data.length;
page = Math.ceil(count/size);
pageNum = pageNum<1?1:pageNum;
pageNum = pageNum>page?page:pageNum;
callback(null,'')
})
},
function(callback){
coll.find({billId:req.query.billId}).sort({_id:-1}).limit(size).skip((pageNum-1)*size).toArray((err,data)=>{
callback(null,data)
})
}],
function(err,data){ //data值的是上面异步处理的函数返回的结果集
['',data]
res.render('billSearch',{list:data[1],page:page,count:count,pageNum:pageNum,size:size,name: req.session.name,lujing:req.url.replace(/\&pageNum.*/,"")});
database.close();
})
})
})
})
在以上代码中,虽然解决了查询的分页问题,但会出现点击下一页url中pageNum累加而不是消失的情况,针对这种情况,我对路径进行了处理,如上面代码中紫色的部分。
通过这个项目,让我对node.js的理解更进一步加深了,希望通过以后的学习会让自己变得越来越好。