摘要:配置完成后運(yùn)行和命令。另一張表存儲(chǔ)的是用戶和商品。連接數(shù)據(jù)庫初始化查詢商品列表和購物車。商品列表和購物車數(shù)據(jù)是直出,減少頁面請(qǐng)求。
【新增vue中使用pug模板】
在webpack.config.js引入pug的loader,就可以在vue中使用pug模板。
module: { loaders: [ { test: /.vue$/, loader: "vue-loader" }, { test: /.pug$/, loader: "pug" } ] }, vue: { loaders: { html: "pug", css: "style!css!stylus", }, }
我的list.vue中的模板代碼如下:
div.content_wrap div.content_left h3 商品列表 div.item(v-for="list in mess",@click="add_to_cart",data-id="{{list.f_id}}") div.img_wrap img(:src="list.f_avatar") span {{list.f_name}} div#content_right.content_right(@click="delete_item") h3 購物車 div.item(v-for="list in cart_mess",data-id="{{list.f_id}}") div.img_wrap img(:src="list.f_avatar") span {{list.f_name}} div.delete_layer p.delete 刪除項(xiàng)目介紹
這是用vue寫前端,用node來接收前端發(fā)來的請(qǐng)求,然后進(jìn)行相應(yīng)的數(shù)據(jù)操作,例如數(shù)據(jù)的存取和刪除等。這是個(gè)人的練習(xí)項(xiàng)目,目前功能做的比較簡(jiǎn)單,主要是展示商品列表,把商品加入購物車,從購物車刪除商品三個(gè)小功能。
搭建本地環(huán)境因?yàn)槭怯胿ue,需要用babel把es6語法轉(zhuǎn)為es5語法。
1.配置.babelrc文件
{ "presets": [ "es2015", "stage-2" ], "plugins": ["transform-runtime"] }
2.配置package.json文件
3.配置webpack.config.js文件。因?yàn)閎abel后的代碼是遵循commonjs規(guī)范的代碼,不能直接在瀏覽器上運(yùn)行,需要用webpack打包成可直接運(yùn)行的代碼。
之前有寫過babel相關(guān)的筆記,可以點(diǎn)擊這里查看。
配置完成后運(yùn)行 npm run build 和 webpack 命令。運(yùn)行后會(huì)生成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
數(shù)據(jù)庫使用mysql,僅有兩張表,一張表存儲(chǔ)的是商品id,商品名,商品圖。另一張表存儲(chǔ)的是用戶id和商品id。
my_server.js 使用node的expres,mysql,path,pug模塊,為了能解析http請(qǐng)求數(shù)據(jù),還需要引入body-parser。
lib文件夾下的文件是babel生成的,src文件夾下的文件這是webpack打包后的文件。
今天優(yōu)化了下,購物車首屏加載使用pug模板將數(shù)據(jù)直出到頁面,提高加載速度。
1、連接數(shù)據(jù)庫
var conn = mysql.createConnection({ host: "localhost", user: "root", password: "root", database:"test", port: 3306 }); conn.connect();
2.初始化查詢商品列表和購物車。商品列表和購物車數(shù)據(jù)是直出,減少頁面http請(qǐng)求。
index.pug首頁模板
doctype html html(lang="en") head title= "index" body div(id="app") app script. list_data= !{init_list_data}; cart_data= !{init_cart_data}; script(src="/index.js")
my_server.js
//初始化查詢商品列表和購物車 app.get("/",function(req,res){//有index默認(rèn)進(jìn)index頁,我把index名字改了才進(jìn)入這個(gè)頁面的 let list_query_sql = "select f_id,f_name,f_avatar from t_list limit 10", list_search_result, cart_search_result; return new Promise(function(resolve){ conn.query(list_query_sql, function (err2, rows) { if (err2) console.log(err2); list_search_result = JSON.stringify(rows); resolve(list_search_result); }) }) .then(function(list_search_result){ let cart_query_sql = "SELECT t_list.f_id,t_list.f_name,t_list.f_avatar FROM t_list INNER JOIN t_item_user ON t_list.f_id= t_item_user.f_item_id WHERE t_item_user.f_uid=2333"; conn.query(cart_query_sql, function (err2, rows) { if (err2) console.log(err2); cart_search_result = JSON.stringify(rows); res.render("index",{//pug(jade)是express默認(rèn)模板 init_list_data:list_search_result, init_cart_data:cart_search_result, }); }); });
});
2.加入購物車
list.vue頁面的請(qǐng)求
add_to_cart:function (e) { let item_id = parseInt(e.currentTarget.getAttribute("data-id"));//vue獲取當(dāng)前dom對(duì)象 let data = {id:2333,item_id:item_id};//傳入用戶id和商品id this.$http.post("/add_to_cart",{id:2333,item_id:item_id}).then(response => { if(response.data.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 = ""+"" + "test1"+"" +""; div.innerHTML = str; document.getElementById("content_right").appendChild(div); }else if(response.data.errcode ===2){ alert("已經(jīng)添加過了哦"); } }, response => { // error callback }); }刪除
"+ "
my_server.js接收請(qǐng)求
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; return new Promise(function(resolve){ 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]; resolve(param); } }) }) .then(function(param){ 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"); } }) }) .catch(function(){ let $return={ errcode:2, errmsg:"該商品已經(jīng)存在", }; res.end(JSON.stringify($return));//返回 })
});
具體代碼我的github上有,隨手給個(gè)star也是極好的-.-。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/82688.html
摘要:配置完成后運(yùn)行和命令。另一張表存儲(chǔ)的是用戶和商品。連接數(shù)據(jù)庫初始化查詢商品列表和購物車。商品列表和購物車數(shù)據(jù)是直出,減少頁面請(qǐng)求。 【新增vue中使用pug模板】 在webpack.config.js引入pug的loader,就可以在vue中使用pug模板。 module: { loaders: [ { test:...
摘要:配置完成后運(yùn)行和命令。另一張表存儲(chǔ)的是用戶和商品。連接數(shù)據(jù)庫初始化查詢商品列表和購物車。商品列表和購物車數(shù)據(jù)是直出,減少頁面請(qǐng)求。 【新增vue中使用pug模板】 在webpack.config.js引入pug的loader,就可以在vue中使用pug模板。 module: { loaders: [ { test:...
摘要:之前剛?cè)腴T并做好了一個(gè)簡(jiǎn)而全的純?nèi)彝暗捻?xiàng)目,數(shù)據(jù)都是本地模擬請(qǐng)求的詳情請(qǐng)移步這里為了真正做到數(shù)據(jù)庫的真實(shí)存取,于是又開始入門了并以此來為之前的頁面寫后臺(tái)數(shù)據(jù)接口。 之前剛?cè)腴Tvue并做好了一個(gè)簡(jiǎn)而全的純vue2全家桶的項(xiàng)目,數(shù)據(jù)都是本地 json 模擬請(qǐng)求的;詳情請(qǐng)移步這里:vue-proj-demo 為了真正做到數(shù)據(jù)庫的真實(shí)存取,于是又開始入門了 node+express+mong...
摘要:利用中間件實(shí)現(xiàn)異步請(qǐng)求,實(shí)現(xiàn)兩個(gè)用戶角色實(shí)時(shí)通信。目前還未深入了解的一些概念。往后會(huì)寫更多的前后臺(tái)聯(lián)通的項(xiàng)目。刪除分組會(huì)連同組內(nèi)的所有圖片一起刪除。算是對(duì)自己上次用寫后臺(tái)的一個(gè)強(qiáng)化,項(xiàng)目文章在這里。后來一直沒動(dòng),前些日子才把后續(xù)的完善。 歡迎訪問我的個(gè)人網(wǎng)站:http://www.neroht.com/? 剛學(xué)vue和react時(shí),利用業(yè)余時(shí)間寫的關(guān)于這兩個(gè)框架的訓(xùn)練,都相對(duì)簡(jiǎn)單,有的...
摘要:本文源碼簡(jiǎn)介之前剛?cè)腴T并做好了一個(gè)簡(jiǎn)而全的純?nèi)彝暗捻?xiàng)目,數(shù)據(jù)都是本地模擬請(qǐng)求的詳情請(qǐng)移步這里為了真正做到數(shù)據(jù)庫的真實(shí)存取,于是又開始入門了并以此來為之前的頁面寫后臺(tái)數(shù)據(jù)接口。 本文源碼:Github 簡(jiǎn)介: 之前剛?cè)腴Tvue并做好了一個(gè)簡(jiǎn)而全的純vue2全家桶的項(xiàng)目,數(shù)據(jù)都是本地 json 模擬請(qǐng)求的;詳情請(qǐng)移步這里:vue-proj-demo 為了真正做到數(shù)據(jù)庫的真實(shí)存取,于是又...
閱讀 3289·2023-04-25 14:35
閱讀 3422·2021-11-15 18:00
閱讀 2563·2021-11-12 10:34
閱讀 2493·2021-11-11 16:54
閱讀 3481·2021-10-08 10:12
閱讀 2767·2021-09-06 15:02
閱讀 3320·2021-09-04 16:48
閱讀 2801·2019-08-29 14:02