有做过站长,或者玩过视频cms的朋友应该了解过市场上有种类繁多的php视频cms,做完一个做过站长的垃圾前端工程师,想了半天,做点贡献(其实就是自己想写),写一套nodejs+mongodb的cms怎么样呢(其实是因为失业,心情不大好,转移情绪)。
第一章手拉手开发nodejs电影cms系统①:内容规划,导航分类,视频数据,用户,留言
第二章手拉手开发nodejs电影cms系统②:定时任务,视频源数据,初始化数据
第三章手拉手开发nodejs电影cms系统③:宝塔面板懒人部署
<<< 用nodejs+mongodb开发了套影视站点cms,觉得可以的大佬可以送个star >>>
第一章,内容规划
后台部分
按功能来划分,视频数据,留言模块,用户模块,配置模块,其他模块(导航,分类),模板模块,定时认为模块,脚本管理模块。
前台部分
按页面来分,主页面(展示各类信息),详情页(展示单条数据的信息),播放页(展示单条数据的信息+播放),个人中心(修改密码,修改昵称),分类页(全部分类,年代,地区),搜索页(搜索数据),导航页(某个导航下的所有分类数据)
导航分类(后台)
先要确定分类字段,在电影网站的分类页面,都会有分类的单独描述,关键字(这里简称seo信息)。导航下也许存在二级分类(可能需要联表查询子分类),导航可以设置显示隐藏。导航万一要调整输出顺序呢?(所以index位置少不了)
name(用于导航名称),display(显示隐藏),parent_id(存在父级导航,那么存父级的_id,不存在则存false,用于判断真假,是否是一级导航或者二级分类),seo信息用于存储
{
"name" : "动作片",
"parent_id" : ObjectId("5e819a8619f4d790bc5d0c76"),
"display" : true,
"seo" : {
"title" : "动作片",
"keywords" : "动作片",
"description" : "动作片"
},
"type" : "nav_type",
"index" : 0
}
视频数据(后台)
先要确定数据字段,有哪些字段??字段设置成什么类型合适??
这里我参照资源网的来思考做
标题,导演,主演,更新时间,描述,更新状态,封面,语言,地区,发布时间。这几个字段是必须要有的,
这里需要注意的是,如果搜索中药做演员表索引搜索的话,最好吧演员表这里设置成数组.例: ["靳东","蒋欣"];
这样在mongodb中使用$in操作符方便查找演员,我这里因为不做演员索引,索引就直接字符串来存。
如果不是存的数组,存字符串来查找演员,那么免费版芒果,只能用正则,很浪费时间
其他功能比如: 显示隐藏display,允许留言replay,置顶popular,可以设置布尔值
{
"videoTitle" : "如果岁月可回头",
"director" : "张建栋",
"videoImage" : "https://img.sokoyo-rj.com/tuku/upload/vod/2020-03-20/202003201584709196.jpg",
"poster" : "/upload/poster/2c726d3d-4afb-46d9-b86f-32718ad6fc08.jpg",
"video_tags" : [],
"performer" : "靳东,蒋欣,李宗翰,李乃文,左小青,赵子琪,傅晶,陈冰",
"video_type" : ObjectId("5e7e0c2747c77574c0c55429"),
"video_rate" : 0,
"update_time" : "2020-03-27 22:16:02",
"language" : "国语",
"sub_region" : "大陆",
"rel_time" : "2020",
"introduce" : "同一个城市中,三个彼此陌生的家庭都出事了,三个婚姻失败的家庭孤独无助难以自拔,不约而同想换 个活法,逃避现实生活的残酷。一个有着一段风雨过去的女人介入了他们的颠覆,等待他们的是无尽的未知,疯狂玩乐代孕艳遇快意恩仇。有人选择顺从宿命,有人选择逆天而爱,历经了万水千山,是重新回头还是拒绝,他们该如何面对?",
"remind_tip" : "更新至14集",
"popular" : true,
"allow_reply" : false,
"display" : true,
"scource_sort" : false
}
分类怎么办?
一个电影在展示的时候是需要找对应的分类,如果字段写死了,那么后期想修改分类的名称,就要找到所有的视频数据,批量替换旧的分类名称,这就不好了。最好的办法就是《联表查询》,mongo提供了联表查询的操作,使用管道aggregate操作符来联表查询
{
$lookup: {
from: "other", // 关联的表 名称
localField: "video_type", // 当前表的字段 需要关联到目标表
foreignField: "_id", // 目标表和当前表字段对应的字段
as: "type" // 输出的字段
}
},
{
$unwind: "$type"
}
用户模块
用户信息最少也需要有三个字段,username(用户名), password(密码),nickname(昵称)
其他的比如,显示隐藏display, 权限位置高低grade_id,是否默认default,可以做,这里以最简单的为例子
密码可以md5或者md5+hash,或者加点盐??
_id 是mongodb插入时自带的唯一索引的字段,对于分布式来说解决了id重复的问题,我们可以直接用。省去了自己生成id的麻烦事了,自带唯一索引,血赚
{
"_id" : ObjectId("5e7e35cf4345c47a1c8c15f6"),
"userName" : "abcdxxxx",
"passWord" : "ba0a086c8a7b0ca4232406b5efff3a95",
"nickName" : "阿打算",
"admin" : false,
"display" : true,
"default" : false,
"grade_id" : 0
}
留言模块
可能新同学(这里指的是cxk打篮球的那种前端去搞留言)做留言的时候麻烦过,怎么规划?有啥字段。
这里以楼中楼形式留言为模型。
数据字段如下:
- _id系统自带,用于表示本条数据的唯一id,
- vid用于关联视频表中对应视频的唯一_id,
- uid用于关联用户表中对应的用户的唯一_id,
- pid用于查找本条留言的父一级(这里指盖楼那个小崽子那条留言的_id)
- wid楼里面的留言肯定是对某某人进行的,你回复了哪个鳖孙??就是那个鳖孙的唯一_id
{
"_id" : ObjectId("5e7f93a60eefb36e54fe8f72"),
"vid" : ObjectId("5e7e15b04a285358100e3d6f"),
"uid" : ObjectId("5e7e35cf4345c47a1c8c15f6"),
"pid" : false,
"wid" : false,
"agree" : true,
"display" : true,
"date" : 1585419174015.0,
"sub_date" : 1585419174014.0,
"text" : "达大厦"
}
和视频数据关联分类数据一样,我们不能每条留言吧用户名和对谁回复写死,万一对方改名了呢??你全表在找到旧的数据疯狂替换吗?所以这里还得用联表查询。
查找留言的时候,规则如下:
先找到一级评价,也就是盖楼那个鳖孙
然后循环这两条数据,用这两条数据_id,去找盖楼的下面的二级回复的数据,找到吧他们加到本条数据(盖楼的那条数据)的children字段里面
至此留言和用户部分结束。