zoukankan      html  css  js  c++  java
  • 使用express4.X + jade + mongoose + underscore搭建个人电影网站

      (-。-;), 周末过得真是快啊,  很久以前就看到imooc上有个搭建个人电影网站一期 ,二期的视频, 这两周宅家里撸玩没事干, 我也学着搭了一个, 这些东西都是基础, 只要花点时间很好学的, nodeJS这东东就是轻量级, 哪里不爽点哪里。

      如果你学着写完可以学到:

    1.   express新建项目
    2.   express自带的jade模板引擎的使用
    3.   express的路由管理
    4.   express中的权限管理
    5.   express如何与mongoose结合, 以及mongoose中的schema和model的使用方法, and CRUD( you know what do i say o(^▽^)o)
    6.   underscore的前端模板的使用
    7.   grunt的nodemon模块和concurrent模块使用方法;
    8.   如何通过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

    作者: NONO
    出处:http://www.cnblogs.com/diligenceday/
    企业网站:http://www.idrwl.com/ 厦门点燃未来网络科技
    开源博客:http://www.github.com/sqqihao
    QQ:287101329
    微信:18101055830 

    厦门点燃未来网络科技有限公司, 是厦门最好的微信应用, 小程序, 微信网站, 公众号开发公司

  • 相关阅读:
    美剧字幕美国怪谭第一季第4集
    ios 中生成随机数
    美剧字幕绿箭侠第一季第1集
    关于iOS6应用中第三方类库不支持armv7s的问题解决
    美剧字幕美国怪谭第一季第2集
    美剧字幕美国怪谭第一季第一集
    美剧字幕美国怪谭第一季第3集
    NewWords/1100
    Developing for App StorePreparing the Development Team03
    平静(转载)
  • 原文地址:https://www.cnblogs.com/diligenceday/p/4266667.html
Copyright © 2011-2022 走看看