Nodejs电影建站开发实例(下)
作为一个真正的网站,不能没有数据的支持,下面使用的数据库为mongodb,电影可能有的数据:电影名称、导演、国家、语言、上映时间、图片、简介、视频
4、使用路由
app.js
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.js
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;
index.js
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;
5.数据库连接
新增config文件夹用于存储数据库配置,在下面创建config.js存放数据库配置信息,mongoose.js用于连接数据库
初次使用mongoose?>>>>>>>>>>>>>>>>>
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(); .....
6、实现增删查看改
不知道怎么用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'); });
删除:/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'); });
修改:
//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 }); }); });
添加:
//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:'#' } }); });
查询:
//首页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 }); }); });
查询单条:
//详情页 //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 }); }); });
终极测试:
先清除所有表数据
添加一条
添加后列表:
编辑
编辑后列表
删除后列表
2024还活着,挺好的,向着星辰与深渊,加油,博客园不要倒下啊!