亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

用vue和node寫的簡易購物車實現

2019-11-19 16:44:21
字體:
來源:轉載
供稿:網友

項目介紹

這是用vue寫前端,用node來接收前端發來的請求,然后進行相應的數據操作,例如數據的存取和刪除等。這是個人的練習項目,目前功能做的比較簡單,主要是展示商品列表,把商品加入購物車,從購物車刪除商品三個小功能。

搭建本地環境

因為是用vue,需要用babel把es6語法轉為es5語法。

1.配置.babelrc文件

{ "presets": [  "es2015",  "stage-2" ], "plugins": ["transform-runtime"]}

2.配置package.json文件

3.配置webpack.config.js文件。因為babel后的代碼是遵循commonjs規范的代碼,不能直接在瀏覽器上運行,需要用webpack打包成可直接運行的代碼。

配置完成后運行 npm run build 和 webpack 命令。運行后會生成lib和dist文件夾。

文件目錄

-dist  -index-lib  -index.js  -my_server.js-src  -component    -list.vue  -public    -view      -index.pug    -index.js    -my_server.js-.babelrc-package.json-webpack.config.js

數據庫使用mysql,僅有兩張表,一張表存儲的是商品id,商品名,商品圖。另一張表存儲的是用戶id和商品id。

my_server.js 使用node的expres,mysql,path,pug模塊,為了能解析http請求數據,還需要引入body-parser。

lib文件夾下的文件是babel生成的,src文件夾下的文件這是webpack打包后的文件。

購物車實例

今天優化了下,購物車首屏加載使用pug模板將數據直出到頁面,提高加載速度。

1、連接數據庫

var conn = mysql.createConnection({  host: 'localhost',  user: 'root',  password: 'root',  database:'test',  port: 3306});conn.connect();

2.初始化查詢商品列表和購物車。商品列表數據是直出的,而購物車列表是用post請求的數據,后續會優化成數據直出到頁面,減少http請求,加快頁面加載速度。

index.pug首頁模板

doctype html  html(lang="en")    head      title= 'index'    body      div(id='app')        app    script.     init_data= !{init_data};    script(src='http://libs.baidu.com/jquery/2.1.1/jquery.min.js')    script(src='http://localhost:4444/index.js')

list.vue

<template>  <div class="content_wrap">    <div class="content_left">      <h3>商品列表</h3>      <div class="item" v-for="list in mess" @click="add_to_cart" data-id="{{list.f_id}}">        <div class="img_wrap">          <img :src='list.f_avatar' >        </div>        <span>{{list.f_name}}</span>      </div>    </div>    <div class="content_right" id="content_right" @click="delete_item">      <h3>購物車</h3>      <div class="item" v-for="list in cart_mess" data-id="{{list.f_id}}">        <div class="img_wrap">          <img :src='list.f_avatar'>        </div>        <span>{{list.f_name}}</span>        <div class="delete_layer">          <p class="delete">刪除</p>        </div>      </div>    </div>  </div></template><script>  export default {        },    data(){      return {        mess:init_data,        cart_mess:[]      }    },    methods:{         },    init:function(){      let self = this;      //初始化購物車      this.$http.post('/search_cart',{user_id:2333}).then(response => {        if(response.data.errcode===0){          let data = response.data;          self.cart_mess = data.data;        }      }, response => {        // error callback      });    }  }</script>

my_server.js

 //初始化查詢商品列表  app.get('/',function(req,res){  var selectSQL = 'select * from t_list limit 4';  conn.query(selectSQL, function (err2, rows) {    if (err2) console.log(err2);    var seach_result = JSON.stringify(rows);    res.render('index',{//pug(jade)是express默認模板      init_data:seach_result,    });  });});

初始化查詢購物車列表

這里邏輯是根據用戶id查出商品id,再根據商品id查出商品信息添加到頁面上

用promise寫異步邏輯

app.post('/search_cart', function (req, res) {  return new Promise(function(resolve){    let return_data = {      req :req    };    resolve(return_data);  })  .then(function(return_data){    let user_id=return_data.req.body.user_id;    let query = 'SELECT * FROM t_item_user WHERE f_uid = ?';    let query_param = user_id;    return new Promise(function(resolve){      conn.query(query,query_param, function (err2, rows) {        resolve(rows);      });    });  }).then(function(rows){    if(rows.length>0){      let query_item = 'SELECT * FROM t_list WHERE f_id in (?)';      let whereIn = [];      for(let i=0,len=rows.length;i<len;i++){        whereIn.push(rows[i].f_item_id);      }      conn.query(query_item,[whereIn], function (err2, rowss) {//異步分兩次查。。。。        if (err2){          console.log(err2);        }        let $return={          errcode:0,          errmsg:'',          data:rowss,        };        res.end(JSON.stringify($return));//返回      });    }else if(rows.length==0){      let $return={        errcode:0,        errmsg:'',        data:''      };      res.end(JSON.stringify($return));//返回    }  });});

3.加入購物車

list.vue頁面的請求

add_to_cart:function (e) {    let item_id = parseInt(e.currentTarget.getAttribute('data-id'));//vue獲取當前dom對象    let data = {id:2333,item_id:item_id};    $.ajax({      type: "post",      url: "/add_to_cart",      dataType: "json",      data: JSON.stringify(data),      contentType: 'application/json',      success: function (response) {        if(response.errcode ===1 ){          console.log('加入購物車成功');          let div = document.createElement('div');          div.setAttribute('class','item');          div.setAttribute('data-id',item_id);          let img_src;          if(e.target.nodeName==='IMG'){            img_src = e.target.getAttribute('src');          }else if(e.target.nodeName==='SPAN'){            img_src = e.target.previousSbiling.getAttribute('src');          }          let str = '<div class="img_wrap"> '+'<img src="'+ img_src +'">'              + '</div><span>test1</span>'+'<div class="delete_layer">'            +'<p class="delete">刪除</p>'+ '</div>';          div.innerHTML = str;          document.getElementById('content_right').appendChild(div);        }else if(response.errcode ===2){          alert('已經添加過了哦');        }      },      error: function (request) {      }    });  }

my_server.js接收請求 

app.post('/add_to_cart', function (req, res) {  let request = req.body;  let query = 'SELECT f_uid,f_item_id FROM t_item_user WHERE f_item_id = ?';  let query_param = request.item_id;  conn.query(query,query_param, function (err2, rows) {    if (err2) console.log(err2);    if(rows.length===0){      //insert      let sql = 'insert into t_item_user(f_uid,f_item_id) values(?,?)';      let param = [req.body.id,req.body.item_id];      conn.query(sql,param, function (err1, res1) {        if(res1.affectedRows==1){          let $return={            errcode:1,            errmsg:'插入成功',          };          res.end(JSON.stringify($return));        }else{          console.log('what');        }      })    }else{      let $return={        errcode:2,        errmsg:'該商品已經存在',      };      res.end(JSON.stringify($return));//返回    }  })});

github:https://github.com/yunhongyao/simple_shopping_cart

完整代碼下載:simple_shopping_cart_jb51.rar

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美日韩中文在线制服| 亚洲黄页网在线观看| 亚洲免费视频观看| 欧美精品久久久久久久免费观看| 精品福利在线视频| 一个人www欧美| www亚洲欧美| 亚洲另类xxxx| 亚洲第一福利视频| 精品久久久久久久久久久| 色综合导航网站| 美女视频黄免费的亚洲男人天堂| 亚洲情综合五月天| 在线播放精品一区二区三区| 国产精品久久久久久久久久小说| 国产精品成人免费视频| 久久99精品久久久久久噜噜| 欧美成人免费播放| 日韩在线激情视频| 欧美激情三级免费| 国产一区视频在线| 亚洲天堂男人天堂女人天堂| 久久69精品久久久久久国产越南| 国产精品丝袜高跟| 亚洲欧美日韩一区在线| 久久6免费高清热精品| 91精品国产色综合久久不卡98口| 中文字幕亚洲专区| 国产精品jizz在线观看麻豆| www.久久久久| 久久久久久午夜| 日韩女优在线播放| 亚洲理论电影网| 国产91九色视频| 在线成人一区二区| 欧美久久精品一级黑人c片| 亚洲午夜精品久久久久久性色| 在线免费观看羞羞视频一区二区| 日韩一区二区三区在线播放| 亚洲色图美腿丝袜| 在线观看国产成人av片| 日韩中文字幕亚洲| 成人久久一区二区三区| 欧美电影第一页| 成人网在线视频| 欧美国产精品人人做人人爱| 一本色道久久88综合亚洲精品ⅰ| 国产精品入口免费视频一| 亚洲人成绝费网站色www| 日韩三级成人av网| 欧美—级高清免费播放| 美女视频久久黄| 日韩欧美国产骚| 亚洲国产精品成人一区二区| 777国产偷窥盗摄精品视频| 色偷偷亚洲男人天堂| 一区二区在线视频播放| 欧美成人第一页| 激情亚洲一区二区三区四区| 欧美成人精品一区二区| 久久综合免费视频影院| 国产一区欧美二区三区| 中文日韩在线观看| 一区二区三区在线播放欧美| 琪琪第一精品导航| xvideos国产精品| 激情亚洲一区二区三区四区| 在线视频日本亚洲性| 日韩欧美精品中文字幕| 国产精品吴梦梦| 日韩欧美国产中文字幕| 最近的2019中文字幕免费一页| 亚洲精品欧美日韩| 91久久嫩草影院一区二区| 日本久久91av| 国产69久久精品成人| 在线看福利67194| 97精品国产aⅴ7777| 精品精品国产国产自在线| 日韩高清av一区二区三区| 日韩高清电影好看的电视剧电影| 国产精品久久久久久久久久久久| 国产成人97精品免费看片| 国产精品久久久久久久久久99| 国产97在线|亚洲| 欧美日韩国产在线看| 国产区精品视频| 福利二区91精品bt7086| 亚洲天堂av综合网| 国产日韩欧美在线观看| 欧美综合在线观看| 久久精品中文字幕免费mv| 国产成人久久久精品一区| 国产在线a不卡| 国产一区二区三区日韩欧美| 在线观看亚洲视频| 国产v综合v亚洲欧美久久| 日韩在线观看电影| www高清在线视频日韩欧美| 成人免费视频在线观看超级碰| 68精品久久久久久欧美| 欧美大片免费观看在线观看网站推荐| 国产亚洲在线播放| 亚洲一区www| 亚洲成人精品久久| 日韩免费观看网站| 欧美成人一区二区三区电影| 国产午夜精品麻豆| 久久久久久久久久久人体| 亚洲欧美激情在线视频| 亚洲精品国产精品国自产在线| 国产噜噜噜噜噜久久久久久久久| 欧美大片免费看| 欧美日韩国产综合新一区| 欧美国产日韩精品| 亚洲一区二区久久久久久| 国外视频精品毛片| 亚洲免费人成在线视频观看| 久久久av免费| 欧美天天综合色影久久精品| 久久男人资源视频| 国产精品美女免费看| 狠狠躁夜夜躁人人爽超碰91| 亚洲一级黄色片| 日韩美女毛茸茸| 精品亚洲国产视频| 久久激情五月丁香伊人| 国产精品91免费在线| 国产香蕉精品视频一区二区三区| 色在人av网站天堂精品| 国产精品视频区1| 日韩69视频在线观看| 一本一本久久a久久精品综合小说| 亚洲视频axxx| 精品日韩中文字幕| 国产免费一区视频观看免费| 欧美乱大交xxxxx| 欧美极品美女视频网站在线观看免费| 国产亚洲精品久久久优势| 国产精品久久久久国产a级| 久久精品国产2020观看福利| 亚洲的天堂在线中文字幕| 国产精品电影久久久久电影网| 亚洲最大av网站| 国产人妖伪娘一区91| 亚洲精品综合久久中文字幕| 91在线播放国产| 国产精品网站大全| 精品中文字幕在线2019| 亚洲男人天堂久| 色av中文字幕一区| 欧美美女操人视频| 国产精品入口日韩视频大尺度| 久久精品影视伊人网| 国产精品看片资源| 亚洲一区av在线播放| 欧美性xxxx极品高清hd直播| 成人国产亚洲精品a区天堂华泰| 国产亚洲免费的视频看| 日韩久久精品成人| 91爱视频在线| 精品久久久久久电影| 亚洲乱码一区av黑人高潮| 亚洲精品日产aⅴ|