187.Vue.js智能扫码点餐系统(二十一)【Vue-Socket.io+Koa实现无刷新同步购物车数据 、无刷新同步购物车数量、Ngix】2019.03.26

0、知识点

  • Vue socket.io安装及使用
  • 全部广播,广播给所有人
  • 下次做成同一桌人的数据广播
  • Ngix

1、vue-socket.io的安装、使用步骤

 import VueSocketio from 'vue-socket.io';
  Vue.use(VueSocketio, 'http://a.itying.com');
  • vue实例里面定义sockets,sockets里面的方法表示接收到服务器的消息以后触发
sockets:{
      connect: function(){
        console.log('socket connected')
      },
      customEmit: function(val){
        console.log('this method was fired by the socket server. eg: io.emit("customEmit", data)')
      }
    }
  • 给服务器发数据
this.$socket.emit('emit_method', val);
  • main.js
import Vue from 'vue'
import App from './App.vue'

//请求数据配置
import VueResource from 'vue-resource';
Vue.use(VueResource);


import VueSocketio from 'vue-socket.io';
Vue.use(VueSocketio, 'http://a.itying.com?roomid=a002');

*/




//引入路由  use路由
import VueRouter from 'vue-router';
Vue.use(VueRouter);

//1、创建引入组件

import Start from './components/Start.vue';
import Home from './components/Home.vue';
import Hot from './components/Hot.vue';
import Order from './components/Order.vue';
import Pcontent from './components/Pcontent.vue';
import Search from './components/Search.vue';
import Cart from './components/Cart.vue';
import EditPeopleInfo from './components/EditPeopleInfo.vue';

//2、配置路由

const routes = [
  { path: '/start', component: Start },
  { path: '/home', component: Home },
  { path: '/hot', component: Hot },
  { path: '/order', component: Order },
  { path: '/pcontent', component: Pcontent },
  { path: '/search', component: Search },
  { path: '/cart', component: Cart },
  { path: '/editpeopleinfo', component: EditPeopleInfo },
  { path: '*', redirect: '/start' }
]


//3、实例化VueRouter

const router = new VueRouter({
  routes // (缩写)相当于 routes: routes  属性的简写
})



//4、挂载


new Vue({
  el: '#app',
  router,
  sockets:{  /*测试期间写 也不不写在根里面*/
    connect: function(){
      console.log('socket connected')
    }
    
  },

  render: h => h(App)
})


//5、需要 <router-view></router-view>  放在根组件里面

  

2、socket.js

  • 服务器代码
/**
 * Created by Administrator on 2019/4/01 0019.
 */
const IO = require( 'koa-socket' );
const url=require('url');
const io = new IO();

var socketIo={


    init:function(app) {
        io.attach(app);
        /*注册启动*/

        app._io.on('connection', socket => {

            console.log('连接成功');
            var requestUrl = socket.request.url;
            var roomid = url.parse(requestUrl, true).query.roomid; // 获取房间ID


		    socket.join(roomid);
            //加入购物车
            socket.on('addcart', function (data) {

                console.log('addcart');
                //用户加入房间
                //socket.emit('addcart',data);
                //app._io.emit('addcart',data);   /*广播数据*/
                //对房间内的用户发送消息
                //  app._io.to(roomid).emit('addcart','有人加入购物车了');//包括自己
                socket.broadcast.to(roomid).emit('addcart', 'addcart');//不包括自己
            });

        })
    }



}


module.exports=socketIo;

3、Home.vue

  • 购物车监听来自服务器的广播
  • 代码
<script>
 sockets:{   
            addcart: function(){  /*接受服务器广播过来的addcart*/
                //更新购物车的数量
                this.getCartCount();
            }            
        }
 </script>      

4、Cart.vue

  • 购物车监听来自服务器的广播,并实现无刷新同步购物车数据
  • 代码实现
<script>  
sockets:{   
            addcart: function(){  /*接受服务器广播过来的addcart*/
                //更新购物车的数据
                this.getCartData();
            }            
        }







					decNum(item,key){


                    //请求远程服务器执行更新操作
                    //桌子id  桌子号:是扫描二维码从url获取的
                    var product_id=item.product_id;
                    var num=item.num;
                    var api=this.api+'api/decCart?uid=a001&product_id='+product_id+'&num='+num;

                    this.$http.get(api).then((response)=>{



                        **//修改购物车数据的时候给服务器发消息**
                        this.$socket.emit('addcart','addcart');

                     
					   this.getTotalResult();
                    },(error)=>{
                        console.log(error);
                    })


</script>  
  • 效果截图
    在这里插入图片描述

5、ngix

  • 当用户向服务器发送请求时,会首先通过ngix负载均衡进行转发数据请求到koa,达到减轻服务器压力的作用
    在这里插入图片描述
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
基于Vue.js和Node.js的点餐系统的设计与实现如下: 1. 设计: a. 前端使用Vue.js框架进行开发,通过组件化的方式构建点餐系统的各个功能模块,如菜单展示、购物车、订单等。 b. 后端使用Node.js搭建服务器,并使用Express框架提供API接口,处理前端发送的请求,提供餐厅菜单、订单信息的获取和修改等功能。 c. 数据库采用MySQL来存储菜单、订单等相关信息,并通过Node.js连接进行数据的访问和修改。 2. 实现: a. 前端通过Vue Router实现不同页面之间的跳转,如首页、菜单页、购物车等。 b. 使用Vue组件库(如Element UI)来构建系统的UI界面,简化开发过程。 c. 通过Vue的请求库(如axios)向后端发送HTTP请求,获取菜单列表、订单信息等数据。 d. 用户可以在菜单页中浏览和选择菜品,并将选中的菜品加入购物车。 e. 在购物车页面,用户可以查看已选择的菜品列表,可以增加、删除或修改数量。 f. 当用户确认订单后,前端通过HTTP请求将订单信息发送给后端,后端将订单信息保存到数据库中。 g. 后端通过数据库查询和修改接口,向前端提供菜单的展示、订单的查看和修改等功能。 基于Vue.js和Node.js的点餐系统设计与实现,通过前后端的分离架构,实现了用户友好的界面、高效的数据交互和维护的数据库。同时,还可以结合其他工具和技术,如Webpack进行打包和优化,实现更加完善的点餐系统

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值