Vue2.0全家桶 & Express Mysql开发简单后台管理系统(流量预警,内有gif)

这张图用来做封面,好看而已~


年后那段时间看了黄轶老师出的饿了么高仿单页应用后一直想自己动手开发Vue2.0单页应用(不得不说拿着vue2.0跟着那个1.0教程学是非常蛋疼的事情,踩了很多坑),恰逢这学期有Node.js课程,于是乎,课程设计什么的,一拍即合,当然在做着项目的同时也遇到很多坑,也有很多巧妙解决的地方,于是在这个项目快要结束之际,我想写这篇文章记录,并总结,注意本文并不是介绍怎么做的教学文,只是一些节点的分析和总结。

技术栈在经过考虑后决定使用如下,后端采用Express做RESTful API开发,Mysql作为数据存储,至于为什么不采用mongodb,因为其中很多关联数据表,问过一些有经验的后台,mongodb在处理关系型数据上并不是太合适,Redis作为SESSION存储。

所以这样我用了2个js文件就把后端搞定了。一个定义api,一个做express,mysql,redis连接相关信息。


后台管理界面样式方面采用Element UI(以下简称eleui)作为UI层框架,不得不说Eleui的文档非常完善,各种回调方法,参数都非常完善和易懂,样式美观方面也跟外面那些妖艳的贱货不一样。作为一个前端菜鸟,我都能看着文档api撸出一个应用。

前端采用Vue全家桶这个大家太熟了,简单列一下吧

前端:Vue全家桶

Vue.js

Vue-Cli

Vue-Resource

Vue-Router

Vuex

Element UI

后端:Node

Express

Mysql

Redis


整体思路:

Node服务端不做路由切换,这部分交给Vue-Router完成

Node服务端只用来接收前端通过ajax发送的请求,查询数据库并返回值

所以这样做前后端几乎完全解耦,只要约定好restful数据接口,前端渲染后端返回的数据就ok了。

例如,这里要使用/api/movelist的api取数据库movie表里数据,这里我采用了左联的方式,将movie表中fid等于movieCategory fid的数据筛选出来,这样,我们就能取到movie表的电影,并且还可以得到它属于哪个分类。


router.get('/api/movielist',function(req, res){

connection.query('SELECT movie.id,movie.Mname,movie.PicUrl,movie.showTime,movie.movieUrl,movie.moviePlayTime,movie.enable, movieCategory.name FROM movie LEFT OUTER JOIN movieCategory ON movie.fid = movieCategory.fid order by movie.id ',function(err,doc){

      if(err) {

         console.log(err)

       }elseif(doc) {

          res.json({

            errno:0,

           data:doc

     })

     }

   })

})

富文本编辑器summernote


在富文本选择上,选择了summernote,虽然这样会引入bootstrap和jquery,但是目前来看如果是这种需求确实没有比较好/现成的解决方案,vue的一些富文本插件都有一些功能不全和bug,所以综合考虑还是使用summernote。

summernote需要你在webpack中把jquery加入alias以便全局调用,使用时在mounted周期声明如下。callback里的onImageUpload作为图片上传成功的回调,你可以在此将图片传到服务器获取相对地址并返回到编辑器中,注意这里有个坑,你需要给express中设置上传目录为可访问的静态资源目录。(当初被坑惨了,一直空白 /手动捂脸)

mounted(){

    $('#summernote').summernote({

         lang:'zh-CN',

         height:300,

        minHeight:null,

        maxHeight:null,

        focus:true,

toolbar:[

         ['style',['bold','italic','clear']],

        ['fontsize',['fontsize']],

        ['para',['ul','ol','paragraph']],

         ['insert',['picture','link','video']]

],

     callbacks:{

        onImageUpload:function(files){

        var  data=new FormData();

        Picdata.append('upload',files[0]);


        $.ajax({

            url:'/api/uploadEditorPic',

           type:'POST',

           cache:false,

           data:data,

           processData:false,

           contentType:false

         }).success(function(res) {

           $('#summernote').summernote("insertImage",res);

           }).fail(function(res) {

              console.log('error')

        });

     } 

   }

 })

},


部分功能演示(gif)


在视频管理这里,我们可以用v-if判断后台传回的数据,(我在后台设置一个字段),如果0则为否,1则为是,这样只要判断参数便可以设置该影片是否被禁用,以及解除禁用的操作,这无疑让我们体验到 ‘数据驱动视图’的灵魂,大大提高开发效率。

目前完成功能

轮播图增删改查

视频,视频分类增删改查

话题,话题分类的增删改查(富文本)

用户的简单操作(封禁,解封)

用户上传头像,改名等。


待完成

用户权限划分

视频评论增删改查

话题评论增删改查

我也不知道,精彩待续 


项目运行

DEMO

因为上次放了测试账号被人增加了一些奇怪的东西,这个就暂时不做公开demo了,有需要的去github看源码吧

项目地址:https://github.com/dubinbin/videoBackEnd

因为新webpack的proxytable我弄了后一直不能转发成功,所以我用的是之前的webpack版本,如果有哪位大神有解决方案,请赐教,我把谷歌,stackoverflow都翻了一遍也没有好的解决方案。


因为一些原因(不想做,懒),表单并没有做输入验证,有需要可以参考如下文章

http://blog.csdn.net/github_26672553/article/details/53541055

由于(不会)的原因,也没有用mocha等做测试,纯自测/滑稽,所以这只能算一个练手的作品吧~


后记

作为一名业余前端,在真正开发后端的时候才明白原来平常那些应用简单操作在服务端来做要考虑情况更多。例如用户未登陆去往后台页面如何分辨并返回(使用session进行判断),改一张轮播图需要先请求后台删除原有图片再替换新图片的逻辑操作。删一个分类要同时把该分类关联的另一张表的数据删除。

当然初次做这种前后端联调项目,不免很多代码写的不够漂亮和高效复用,api也可能不是做的很好,还需要不断学习。

在这个项目中不仅学习了后端express,restful api的开发,同时也加强了我对vue组件化开发的学习,router,resource,vuex等全家桶的配合使用,在这个过程中收获甚广,我深知做一个项目是不够充实自身知识栈的,前端/计算机行业需要终身学习的热情,且学且行吧。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容

  • Address:https://www.zybuluo.com/XiangZhou/note/208532 Exp...
    天蠍蒗漫阅读 11,174评论 2 55
  • 之前读《孟子》的时候,就觉得齐宣王有点“虎”。 “寡人有疾,寡人好色,寡人有疾,寡人好勇,寡人有疾,寡人好货。” ...
    东方国学阅读 349评论 0 1
  • 文|般若芙殇 那个少年还没过二十岁的生日,一个人独自躺在冰冷的棺木里,消瘦的脸庞很难令人联想到曾经的笑容来,却一眼...
    李诗民阅读 1,983评论 26 32
  • 今天没有晚自习,坐在办公室等小飞来的空档,打开朋友圈,看到各式各样的:小雪养生之类的话。儿子半小时后来了,回家骑自...
    李乙飞妈阅读 250评论 0 1
  • 我滴妈呀 糟心的一年终于过去了,也真的想不到有什么收获,朋友 对象 技能 钱,简直一样也没有。 到现在,我常常做一...
    Nicidddy阅读 267评论 0 0