【新增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中的模板代码如下:

<template lang="pug">div.content_wrapdiv.content_lefth3 商品列表div.item(v-for='list in mess',@click='add_to_cart',data-id='{{list.f_id}}')div.img_wrapimg(: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_wrapimg(:src='list.f_avatar')span {{list.f_name}}div.delete_layerp.delete 删除
</template>

项目介绍

这是用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打包成可直接运行的代码。
之前有写过babel相关的笔记,可以点击这里查看。
配置完成后运行 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.初始化查询商品列表和购物车。商品列表和购物车数据是直出,减少页面http请求。
index.pug首页模板

doctype html
html(lang="en")headtitle= 'index'bodydiv(id='app')appscript.list_data= !{init_list_data};cart_data= !{init_cart_data};script(src='/index.js')

my_server.js

 //初始化查询商品列表和购物车
app.get('/',function(req,res){//有index默认进index页,我把index名字改了才进入这个页面的
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默认模板init_list_data:list_search_result,init_cart_data:cart_search_result,});});});

});

2.加入购物车
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};//传入用户id和商品idthis.$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 = '<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.data.errcode ===2){alert('已经添加过了哦');}}, response => {// error callback});}

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;return new Promise(function(resolve){conn.query(query,query_param, function (err2, rows) {if (err2) console.log(err2);if (rows.length === 0) {//insertlet 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:'该商品已经存在',};res.end(JSON.stringify($return));//返回})

});

具体代码我的github上有,随手给个star也是极好的-.-。

用vue和node写的简易购物车相关推荐

  1. ES6方法写的简易购物车

    购物车 <!DOCTYPE html> <html><head><meta charset="utf-8" /><title& ...

  2. vue3仿写简易购物车

    这是一个按着千锋kerwin老师的视频写的简易购物车,用vue3写的,软件用vscode,详细视频资源见链接 引入vue3的地址 <script type="text/javascri ...

  3. 【Vue案例】——实现简易购物车功能

    实现简易购物车功能 静态页面展示 商品详情页 购物车页面 购物车功能的实现 将商品添加至购物车 首先我们要在商品详情页为每一个商品的添加购物车按钮绑定一个点击事件,参数是该商品对象(将商品的所有属性包 ...

  4. web快速入门之基础篇-js:3_3、简易购物车

    目录 一.前言 二.js代码实例演示 1.简易购物车01_数量变化 (1)实例代码 (2)效果演示 2.简易购物车02_数量价格同步 (1)实例代码 (2)效果演示 一.前言 上一篇介绍了DHTML对 ...

  5. Vue3简易购物车--添加和删除商品,计算购买商品总价

    简易购物车 文章目录 简易购物车 v-model双向数据绑定 && 表单提交 计算属性computed v-for渲染数据和标签 添加和删除功能 效果图: v-model双向数据绑定 ...

  6. 【前端Vue+后端Node.js+MySql】部署到服务器

    [前端Vue+后端Node.js+MySql]部署到服务器 文章目录 [前端Vue+后端Node.js+MySql]部署到服务器 1.买服务器 2.服务器操作 2.1.修改服务器密码,xshell登录 ...

  7. 基于Vue与Node.js的个人网盘

    基于Vue与Node.js的个人网盘 最近由于学校科技立项相关事宜,学习了一些Vue和Node.js相关知识写出了一个功能简陋的小东西.分享一下现在的状况进行纪念,顺便对寒假实现的功能进行总结 登录功 ...

  8. Vue.js-小demo实现简单的游戏购物车table

    Vue.js-小demo实现简单的游戏购物车table 最近通过学习vue框架,基本熟悉了其中的动态绑定属性,计算属性,监听,条件判断,循环遍历,所以通过一个小demo来巩固一下.这个小demo主要是 ...

  9. Session机制二(简易购物车案例)

    一:案例一(简易购物车) 1.目录结构 2.step1.jsp 1 <%@ page language="java" contentType="text/html; ...

最新文章

  1. (转)浅谈HTML5与css3画饼图!
  2. Win 10 UWP开发系列:设置AppBarButton的图标
  3. 使用geopandas 制作中国疫情地图
  4. handler原子锁_深入Linux内核架构——锁与进程间通信
  5. Slave: received end packet from server, apparent master shutdown:
  6. VHDL-std_logic_vector转换为integer注意
  7. linux c ftp断点续传,求个支持断点续传的ftp脚本
  8. laravel中的自定义函数的加载和第三方扩展库加载
  9. python不同版本共存_多个python版本共存时的pip配置
  10. PML之百分位数、数据分布、正态数据分布
  11. 【笔试/面试】—— 奇葩 C/C++ 语法题
  12. 2018-2019-2 20165209 《网络对抗技术》Exp7: 网络欺诈防范
  13. Tapestry5之Application Module
  14. iOS里的动态库和静态库
  15. python 修改证件照的尺寸
  16. 漏洞复现:使用Kali制作木马程序
  17. 符合W3C的网站的开发模型和必要性的探讨(一)
  18. CSS学习笔记 - 布局
  19. 关于身份证号或者手机号,密码 隐藏中间几位数字
  20. HIDS逐渐的成为主流

热门文章

  1. JavaWeb笔记(七)FilterListener
  2. SpringMVC(3):DispatcherServlet详解
  3. Handler BlockViewHandler has a bad module ManagedPipelineHandler in its module list
  4. 字符编解码的故事–ASCII,ANSI,Unicode,Utf-8区别
  5. 在CentOS6.5上安装Tomcat6
  6. [转载] 山楂树之恋——01-03
  7. android检查可用网络的代码
  8. 关于研究网站开发还是应用程序的思考
  9. shiro——SimpleAuthenticationInfo中的参数
  10. 理解Synchronized