本框架是基于nodejs express框架二次开发的,本框架包含数据库操作示例和注解。 适合nodejs入门学习或者nodejs开发人员开发中小型web项目。直接在命令窗口运行:npm start,就可启动程序!访问地址:http://127.0.0.1:3000/
nodejs数据库链接相关命令
sqlHelper.js
//封装数据操作模块 //引入mysql模块 var mysql=require('mysql'); //引入数据库配置信息 var dbconf=require('./db'); //封装查询操作 //sqlStr参数为sql语句 //param为数组参数 //返回值 function ExecuteReader(sqlStr,param,callback) { //初始化数据库连接对象 var connection=mysql.createConnection(dbconf.mysql); //执行sql语句之前,连接数据库 connection.connect(function(err) { // body... if(err){ //err默认返回值是ture console.log('错误信息:'+err); return; } console.log('数据库连接成功!'); }); if(param!=null){ //执行sql语句 //sqlStr参数为sql语句,param为传入参数数组, //function为回调函数,也就是sql语句执行后要做的操作 connection.query(sqlStr,param,function(err,results){ //返回结果集 if(results){ callback(results); } }); }else{ //执行不带参数的查询方法 connection.query(sqlStr,function(err,results){ //返回结果集 if(results){ callback(results); } }); } //执行sql语句之后,断开数据库 connection.end(function(err) { // body... if(err){ //err默认返回值是ture console.log('错误信息:'+err); return; } console.log('数据库断开成功!'); }); } //封装更新操作 //sqlStr参数为sql语句 //param为数组参数 //返回值 function ExecuteUpdate(sqlStr,param,callback){ //初始化数据库连接对象 var connection=mysql.createConnection(dbconf.mysql); //执行sql语句之前,连接数据库 connection.connect(function(err) { // body... if(err){ //err默认返回值是ture console.log('错误信息:'+err); return; } console.log('数据库连接成功!'); }); if(param!=null){ //执行sql语句 //sqlStr参数为sql语句,param为传入参数数组, //function为回调函数,也就是sql语句执行后要做的操作 connection.query(sqlStr,param,function(err,results){ //返回受影响的行数 int 整型 callback(results.affectedRows); //return results.affectedRows; }); }else{ //执行不带参数的查询方法 connection.query(sqlStr,function(err,results){ //返回受影响的行数 int 整型 callback(results.affectedRows); //return results.affectedRows; }); } //执行sql语句之后,断开数据库 connection.end(function(err) { // body... if(err){ //err默认返回值是ture console.log('错误信息:'+err); return; } console.log('数据库断开成功!'); }); } exports.ExecuteReader=ExecuteReader; exports.ExecuteUpdate=ExecuteUpdate;
db.js部分代码
// conf/db.js // mysql数据库配置信息 module.exports={ //本地数据库 mysql:{ host:'127.0.0.1', // 数据库服务器ip user:'root', //数据库账号 password:'root', //数据库账号密码 port:'3306', //端口号 database:'yifanshop' //数据库名 }, //虚拟机数据库 mysqlVM:{ host:'192.168.52.128', // 数据库服务器ip user:'root', //数据库账号 password:'Pass2017!', //数据库账号密码 port:'3306', //端口号 database:'node' //数据库名 } }
部分页面截图
var categoryDAL = require('../DAL/categoryDAL'); var productDAL=require('../DAL/productDAL'); var async = require('async'); var randomHelper=require('../util/randomHelper'); function indexController(app) { /* GET home page. */ //app.get方法第一个参数是我们添加网站可以请求的地址 //首页 app.get('/', function(req, res) { //应用async模块的api:parallel处理并行无关联操作 async.parallel({ //控制流程1:多级菜单加载 categorylist: function(done) { //处理逻辑 categoryDAL.getCategoryAll(function(catelist) { //循环构造数组对象模型 var categorylist = create_objectArrayList(catelist, 0); done(null, categorylist); }); },//控制流程2:新品发布前五项 newgoodsTop5: function(done) { //处理逻辑 productDAL.getGoodsTopbyNum(5,function(newtoplist){ done(null,newtoplist); }); }, userInfo:function(done){ var userInfo=req.session.customer; done(null,userInfo); },//智能净化板块 jinghualist:function(done){ productDAL.getTopNumGoodlistByCategoryId(37,2,function(jinghualist){ done(null,jinghualist); }); },//洗衣机板块 xiyijilist:function(done){ productDAL.getTopNumGoodlistByCategoryId(48,2,function(xiyijilist){ done(null,xiyijilist); }); },//女装热卖四项 nvzhuanglist:function(done){ productDAL.getTopNumGoodlistByCategoryId(41,4,function(nvzhuanglist){ done(null,nvzhuanglist); }); } }, function(err, results) { res.render('index', { categorylist: results.categorylist, newgoodsTop5:results.newgoodsTop5, jinghualist:results.jinghualist, xiyijilist:results.xiyijilist, nvzhuanglist:results.nvzhuanglist, userInfo:results.userInfo }); }); }); //递归构造树型数组对象 function create_objectArrayList(data, pid) { pid = pid || 0; var list = []; data.map(function(item) { if(item.up_id == pid) { item.list = create_objectArrayList(data, item.category_Id); list.push(item); } }); return list; } //产品页面 app.get('/product', function(req, res) { //res.render方法的第一个参数是我们请求地址对应的网页文件名 res.render('product'); }); //验证码 app.get('/code', function(req, res) { var img = randomHelper.makeCapcha(req); //console.log(req.session.CAPTCHA_KEY); res.setHeader('Content-Type', 'image/bmp'); res.send(img.getFileData()); }); //活动页面 app.get('/discount/1111',function(req,res){ //应用async模块的api:parallel处理并行无关联操作 async.parallel({ //控制流程1:多级菜单加载 categorylist: function(done) { //处理逻辑 categoryDAL.getCategoryAll(function(catelist) { //循环构造数组对象模型 var categorylist = create_objectArrayList(catelist, 0); done(null, categorylist); }); }, userInfo:function(done){ var userInfo=req.session.customer; done(null,userInfo); } }, function(err, results) { res.render('discount', { categorylist: results.categorylist, userInfo:results.userInfo }); }); }); //品牌优选 app.get('/ppyx',function(req,res){ //应用async模块的api:parallel处理并行无关联操作 async.parallel({ //控制流程1:多级菜单加载 categorylist: function(done) { //处理逻辑 categoryDAL.getCategoryAll(function(catelist) { //循环构造数组对象模型 var categorylist = create_objectArrayList(catelist, 0); done(null, categorylist); }); }, userInfo:function(done){ var userInfo=req.session.customer; done(null,userInfo); } }, function(err, results) { res.render('ppyx', { categorylist: results.categorylist, userInfo:results.userInfo }); }); }); //测试模块 app.get('/service/service_online',function(req,res){ res.render('service/service_online'); }); } module.exports = indexController;
代码如下:
var categoryDAL = require('../DAL/categoryDAL'); var productDAL = require('../DAL/productDAL'); var cartDAL = require('../DAL/cartDAL'); var collectDAL = require('../DAL/collectDAL'); var CartInfo = require('../Model/CartInfo'); var async = require('async'); function productController(app) { // body... /* GET home page. */ //app.get方法第一个参数是我们添加网站可以请求的地址 //商品展示页面 app.get('/product/:id', function(req, res) { var product_id = parseInt(req.params.id); //res.render方法的第一个参数是我们请求地址对应的网页文件名 //应用async模块的api:parallel处理并行无关联操作 async.parallel({ //控制流程1:多级菜单加载 categorylist: function(done) { //处理逻辑 categoryDAL.getCategoryAll(function(catelist) { //循环构造数组对象模型 var categorylist = create_objectArrayList(catelist, 0); done(null, categorylist); }); }, //控制流程2:根据产品ID获取产品所有信息 product: function(done) { productDAL.getGoodsById(product_id, function(product) { done(null, product); }); }, userInfo: function(done) { var userInfo = req.session.customer; done(null, userInfo); } }, function(err, results) { //console.log(results.product); //res.setHeader(200, {"Content-Type": "text/html"}); res.render('Product/product', { categorylist: results.categorylist, product: results.product[0], userInfo: results.userInfo }); }); }); app.get('/search', function(req, res) { var q = req.query.q; var currentpage = req.query.js; if(q == null || currentpage == null) { res.redirect('/search?q=&js=1'); } console.log('key:' + q); console.log('pager:' + currentpage); //分页方法 //定义分页参数 //var currentpage = 1; //当前页 var pagercounts = 1; //页面总数 var previouspage = 1; //上一页 var nextpage = 1; //设置分页 每页显示数据条数 var pageSize = 20; var userInfo = req.session.customer; //如果搜索结果为空则返回空数据集 if(q == null || q == '') { q = ''; res.render('search', { productlist: '', currentpage: currentpage, previouspage: previouspage, nextpage: nextpage, pageSum: pagercounts, q: q, userInfo: userInfo }); } else { //应用async模块的api:parallel处理并行无关联操作 async.parallel({ //控制流程1:搜索 productlistPager: function(done) { productDAL.searchGoodsByKey(q, currentpage, pageSize, function(productlist) { done(null, productlist); }); }, //控制流程2:用户信息 userInfo: function(done) { var userInfo = req.session.customer; done(null, userInfo); }, //控制流程3 当前分类商品总数 goodsCounts: function(done) { productDAL.getGoodsCountsByKey(q, function(count) { done(null, count); }); } }, function(err, results) { //将上面几个步骤数据操作并行处理,然后在这里一起操作,提供运行效率 var counts = parseInt(results.goodsCounts); //分页信息处理 //计算总页数 if((counts % pageSize) > 0) { //有余数,数据不足一整页 pagercounts = parseInt(counts / pageSize) + 1; } else { //数据正好填满整页 pagercounts = parseInt(counts / pageSize); } //设置上一页 if(currentpage <= 1) { previouspage = 1; } else { previouspage = currentpage - 1; } //设置下一页 if(currentpage >= pagercounts) { nextpage = pagercounts; } else { nextpage = currentpage + 1; } res.render('search', { productlist: results.productlistPager, currentpage: currentpage, previouspage: previouspage, nextpage: nextpage, pageSum: pagercounts, q: q, userInfo: results.userInfo }); }); } }); //搜索产品请求方法 app.post('/searchhandle', function(req, res) { }); //将商品添加到购物车方法 //ajax app.post('/cart/addhandle', function(req, res) { //目标跳转页面 var target_url = '/cart'; req.session.redirecturl = target_url; //用户必须先登录才能从数据库读取购物车记录并进行加载 //验证登录 var userInfo = req.session.customer; if(!userInfo) { res.status(200).send({ url: '/login', message: '未登录' }); } else { //获取表单提交数据 var product_Id = req.body.product_Id; var customer_Id = userInfo.customer_Id; var num = req.body.goods_num; //设置数据对象 var cartInfo = new CartInfo(); cartInfo.setproduct_Id(product_Id); cartInfo.setcustomer_Id(customer_Id); cartInfo.setnum(num); //添加购物车数据操作 cartDAL.addCart(cartInfo, function(message, results) { if(results) { //加入或者更新成功 res.status(200).send({ url: '/cart', message: message }); } }); } }); //将指定商品从购物车移除 app.get('/cart/removeGoodshandle/:id', function(req, res) { //验证登录 var userInfo = req.session.customer; if(!userInfo) { res.redirect('/login'); } var product_Id = req.params.id; var customer_Id = userInfo.customer_Id; //处理方法 cartDAL.removeGoodsFormCart(customer_Id, product_Id, function(results) { if(results) { //删除成功 res.redirect('/cart'); } else { //删除失败 res.redirect('/cart'); } }); }); //递归构造树型数组对象 function create_objectArrayList(data, pid) { pid = pid || 0; var list = []; data.map(function(item) { if(item.up_id == pid) { item.list = create_objectArrayList(data, item.category_Id); list.push(item); } }); return list; } //移动端产品详细页面 app.get('/mobile/product/:id',function(req,res){ var product_Id = req.params.id; //应用async模块的api:parallel处理并行无关联操作 async.parallel({ //控制流程1:根据产品ID获取产品所有信息 product: function(done) { productDAL.getGoodsById(product_Id, function(product) { done(null, product); }); } }, function(err, results) { //console.log(results.product); //res.setHeader(200, {"Content-Type": "text/html"}); res.render('mobile/product', { product: results.product[0] }); }); }); } module.exports = productController;
完整项目源码下载地址:请点击:》》》