Nodejs電影建站開發實例(下)

做爲一個真正的網站,不能沒有數據的支持,下面使用的數據庫爲mongodb,電影可能有的數據:電影名稱、導演、國家、語言、上映時間、圖片、簡介、視頻php

四、使用路由html

app.jsmongodb

var express = require("express");
var app=express();
var path = require('path');
var index =require('./routes/index');
var admin = require('./routes/admin');


//設置模板引擎
app.set("view engine",'jade');
app.set('views','./views/pages');

//設置靜態資源
app.use(express.static(path.join(__dirname, './public')));


app.use("/",index);
app.use("/admin",admin);



app.listen(3000,function(){
    console.log("請訪問http://localhost:3000");
});

建立路由,把app.js的內容分別轉移到routes下的index.js、admin.js數據庫

admin.jsexpress

var express = require('express');
var router = express.Router();

//localhost:3000/admin/add
router.get("/add",function(req,res){
    res.render('control.jade',{
        title:'後臺電影添加頁',
        movie:{
            title:'',
            director:'',
            country:'', 
            language:'',
            year:'',
            poster:'',
            summary:'',
            flash:''
        }
    });
});


//localhost:3000/admin/list
router.get("/list",function(req,res){
    res.render('list.jade',{
        title:'後臺電影列表',
      movies:[
        {
            _id:1,
            title:'海綿寶寶3D',
            director:'保羅·蒂比特'
        }
      ]
    });
});

module.exports = router;
View Code

index.jsapp

var express = require('express');
var router = express.Router();

//首頁localhost:3000/
router.get('/', function(req, res, next) {
   res.render('index.jade',{
        title:'網站首頁',
        movies:[
            {
            _id:1,
            title:"海綿寶寶3D",
            poster: 'http://img31.mtime.cn/mg/2015/11/17/094620.70277104_170X256X4.jpg'
            },
             {
            _id:2,
            title:"星際迷航3",
            poster:'http://img31.mtime.cn/mg/2016/09/01/143653.31713698_170X256X4.jpg'
            },
            {
            _id:3,
            title:"驚天綁架團",
            poster:'http://img31.mtime.cn/mg/2016/07/12/091819.79722823_170X256X4.jpg'
            },
            {
            _id:4,
            title:"愛寵大機密",
            poster:'http://img31.mtime.cn/mg/2016/06/21/093149.12209704_170X256X4.jpg'
            },
             {_id:5,
            title:"冰川時代4",
            poster:'http://img31.mtime.cn/mt/2012/07/19/131845.38602455_170X256X4.jpg'
            }
        ]
    });
});


//詳情頁
//localhost:3000/movie/1
router.get("/movie/:id",function(req,res){
    res.render('detail.jade',{
        title:'電影詳情',
        movie:{
        title:'海綿寶寶3D',
        director:'保羅·蒂比特',
        country:'美國', 
        language:'英語',
        year:2016,
        poster:'http://img31.mtime.cn/mg/2015/11/17/094620.70277104_170X256X4.jpg',
        summary:'安東尼奧·班德拉斯飾演的大反派海盜傑克現身,他找到了一本神奇的寶書,但是想要得到徹底的力量,必定要找到書中的最後一頁。通過調查,這寶貴的最後一頁,正存在海綿寶寶的家裏。',
        flash:'#'
        }
    })
});

module.exports = router;
View Code

 

5.數據庫鏈接mongoose

新增config文件夾用於存儲數據庫配置,在下面建立config.js存放數據庫配置信息,mongoose.js用於鏈接數據庫ide

初次使用mongoose?>>>>>>>>>>>>>>>>>post

config.js測試

module.exports={
    mongodb:"mongodb://localhost:27017/test"
}

mongoose.js

var mongoose = require("mongoose");
var config = require("./config.js");


module.exports=function(){
    var db = mongoose.connect(config.mongodb);
    db.connection.on("error",function(err){
        console.log("數據庫連接失敗");
    });
    db.connection.on("open",function(err){
        console.log("數據庫連接成功");
    });
};

app.js

....
//數據庫鏈接
var mongoose =require("./config/mongoose.js");
var db=mongoose();
.....

 

 六、實現增刪查看改

不知道怎麼用mongodb增刪查改?>>>>>>>>>>>>>>>>>>>

建立models文件夾,下面建立movie.model.js

var mongoose =require("mongoose");

var movieSchema = mongoose.Schema({
    //電影名稱、導演、國家、語言、上映時間、圖片、簡介
    title:String,
    director:String,
    country:String, 
    language:String,
    year:Number,
    poster:String,
    summary:String,
    flash:String   
});

mongoose.model("movie",movieSchema);

 

在路由引入model

var mongoose = require('mongoose');
var movieModel = mongoose.model('movie');

由於添加頁面和編輯頁是共用的,爲了便於判斷,在添加頁增長了id

 input(type="hidden",name="movie[_id]",value="#{movie._id}")

處理頁:

//提交處理頁:localhost:3000/admin/movie/do
router.post("/movie/do",function(req,res,next){
    //添加和編輯用的是同一個處理頁面
    var movieObj = req.body.movie;
    //判斷id是否已經存在,已存在則更新數據,不然添加新數據
    if(movieObj._id!=="undefined"){
       //存在id,更新
       movieModel.findOne({"_id":movieObj._id},function(err,doc){
            doc.title=movieObj.title;
            doc.director = movieObj.director;
            doc.country = movieObj.country;
            doc.language = movieObj.language;
            doc.year = movieObj.year;
            doc.poster = movieObj.poster;
            doc.summary = movieObj.summary;
            doc.flash = movieObj.flash;
            doc.save();
       })

    }else{
        //沒有id,新增電影
   var movieEntry = new movieModel({
    title:movieObj.title,
    director:movieObj.director,
    country:movieObj.country, 
    language:movieObj.language,
    year:movieObj.year,
    poster:'http://img31.mtime.cn/mg/2016/06/21/093149.12209704_170X256X4.jpg',
    summary:movieObj.summary,
    flash:'http://v.youku.com/v_show/id_XODc4NDY0MjA4.html'
    });
        movieEntry.save();    
    }

    res.redirect('/admin/list');
});
View Code

刪除:/admin/delete?id=..

router.get("/delete",function(req,res,next){
    var id=req.query.id;
    movieModel.findOne({"_id":id},function(err,doc){
        if(err){
            console.log('err:',err);
            return;
        }
        if(doc){
            doc.remove();
        }

    });
    res.redirect('/admin/list');
});
View Code

修改:

//admin/update/1
router.get("/update/:id",function(req,res){
    var id=req.params.id;
    movieModel.findOne({"_id":id},function(err,movie){
        if(err){
            console.log(err);
            return;
        }
        res.render("control.jade",{
            title:"編輯該電影",
            movie:movie
        });
    });

});
View Code

添加:

//localhost:3000/admin/add
router.get("/add",function(req,res){
    res.render('control.jade',{
        title:'後臺電影添加頁',
        movie:{
            title:'電影1',
            director:'史提芬',
            country:'美國', 
            language:'英語',
            year:'2016',
            poster:'http://img31.mtime.cn/mg/2015/03/27/120537.13212993_270X405X4.jpg',
            summary:'填寫詳情',
            flash:'#'
        }
    });
});
View Code

查詢:

//首頁localhost:3000/
router.get('/', function(req, res, next) {
    movieModel.find({},function(err,movies){
        if(err){
            console.log(err);
            return;
        }
        res.render('index.jade',{
               title:'網站首頁',
               movies:movies 
        });
    });
});
View Code

查詢單條:

//詳情頁
//localhost:3000/movie/1
router.get("/movie/:id",function(req,res){
    var id=req.params.id;
    movieModel.findOne({"_id":id},function(err,movie){
        if(err){
            console.log(err);
            return;
        }
        res.render("detail.jade",{
            title:"電影詳情",
            movie:movie
        });
    });

});
View Code

 

 

終極測試:

 先清除全部表數據

添加一條

添加後列表:

編輯

編輯後列表

刪除後列表

 

 下載>>

相關文章
相關標籤/搜索