使用express4.X + jade + mongoose + underscore搭建个人电影网站
(-?-;), 周末过得真是快啊, 很久以前就看到imooc上有个搭建个人电影网站一期 ,二期的视频, 这两周宅家里撸玩没事干, 我也学着搭了一个, 这些东西都是基础, 只要花点时间很好学的, nodeJS这东东就是轻量级, 哪里不爽点哪里。
如果你学着写完可以学到:
- express新建项目
- express自带的jade模板引擎的使用
- express的路由管理
- express中的权限管理
- express如何与mongoose结合, 以及mongoose中的schema和model的使用方法, and CRUD( you know what do i say o(^▽^)o)
- underscore的前端模板的使用
- grunt的nodemon模块和concurrent模块使用方法;
- 如何通过mongo-connect这个npm模块保存用户的信息(session);
....
整个网页主要包含了以下四个模块:
主页 ( ?? ω ?? )y; 列表页 电影详情页 管理页 电影新增 电影删除 电影信息编辑 注册 登陆 登出
通过路由进行权限管理
用户的评论 用户评论互评
慕课网nodeJS的讲师Scott提供的Github地址是:打开 ,这个项目的express是3.x系列的,所以使用express4.x系列的肯定跑不起来,然后我自己写了一个4.x的,Github的项目地址是:没有, 但是你可以点击这里下载源码, 作为学习的参考, 等我把界面再做漂亮点, 功能更好的时候就传Git;
项目的主要目录结构跟平常的express默认结构差不多
项目所依赖的模块还挺多的.... 全安装就好了;
其实bower, less和jslint, mocha, karma, kaola....我都没有用, 太高端了用不起来..工具真心太多了;
主界面大概是这样的,可以先睹为快:
视频界面如下, 新增视频的时候填写的地址默认有一个youku的视频地址, 图片默认是博客园的logo图片;
在mongoose中定义模型的静态方法和实例方法是比较重要的, 以及通过设置字段类型为ObjectId进行关联引用别的表指定_id的字段,我贴上些代码防忘记:
var mongoose = require("mongoose"); var ObjectId = mongoose.Schema.Types.ObjectId; console.log( mongoose.Schema.Types.ObjectId ) var CommentSchema = new mongoose.Schema({ movie_id : String, replys : [ { to : { //相当于是引用了User表下_id值为指定值的单元 type : ObjectId, ref : "UserSchema" }, from : { type : ObjectId, ref : "UserSchema" }, content : String, time : { type : String, default : Date.now() } } ] }); CommentSchema.statics = { fetch : function(cb) { return this.find({}).exec(cb); }, findById : function(id,cb) { return this.findOne({_id:id}).exec(cb); }, findByMovieId : function(movie_id,cb) { return this.findOne({movie_id:movie_id}).exec(cb) }, findByMovieIdExec : function(movie_id) { return this.findOne({movie_id:movie_id}); } }; //每一次保存之前会调用这个方法; CommentSchema.pre("save",function(next) { next(); }); //为mongodb定义了这个数据模型, 这个数据模型和当前的数据库绑定了; //这个就是数据库内部的table名字; var Comment = mongoose.model("CommentSchema",CommentSchema); module.exports = Comment;
对于慕课网中的教程进行了一些改进, 比如评论的发布和拉取我通过ajax实时刷新获取, 以及视频的删除不跳转界面等, 也通过ajax进行刷新, 界面的美化(无视这句话)等;
end
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。