作为一个真正的网站,不能没有数据的支持,下面使用的数据库为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
});
}); });

终极测试:

先清除所有表数据

添加一条

添加后列表:

编辑

编辑后列表

删除后列表

下载>>

Nodejs电影建站开发实例(下)的更多相关文章

  1. Nodejs电影建站开发实例(上)

    网站环境:使用express框架.bootstrap样式.jade模板.mongoose数据库 npm insatll express -g npm insatll jada -g npm insat ...

  2. Mac电脑 阿里云ECS(ContentOS) Apache+vsftpd+nodejs+mongodb建站过程总结

    简介:我这里采用的阿里云免费提供的6个月ECS服务器:制作了一个简单的爬虫程序:里面很多功能还么做:搜索里面功能回去的数据未做处理会崩溃(大家不要点搜索功能):地址:http://loldragon. ...

  3. 在mvc4中多语言建站的实例

    环境:vs2012 asp.net mvc4. 实现方式:resource 资源文件,根据路由规则中Lang参数来判断载入哪种语言方式 在网上找到了相关资料,顺便自己做了个练习,新建工程之类的步骤就免 ...

  4. [web建站] 优课急送《零基础快速学习建站》视频+课件【价值399元】

    [课程介绍]你想快速建一个网站出来吗?你想从什么都不懂到一两天出一个漂漂亮亮的站吗?你想完成领导交给你的任务找人建站吗?你想自己建站来创业吗?你想学会建站之后,利用给别人建站来赚钱吗?你想建一个跟某个 ...

  5. [web建站] 极客WEB大前端专家级开发工程师培训视频教程

    极客WEB大前端专家级开发工程师培训视频教程  教程下载地址: http://www.fu83.cn/thread-355-1-1.html 课程目录:1.走进前端工程师的世界HTML51.HTML5 ...

  6. Nodejs学习笔记(三)——一张图看懂Nodejs建站

    前言:一条线,竖着放,如果做不到精进至深,那就旋转90°,至少也图个幅度宽广. 通俗解释上面的胡言乱语:还没学会爬,就学起走了?! 继上篇<Nodejs学习笔记(二)——Eclipse中运行调试 ...

  7. 开发小白也毫无压力的hexo静态博客建站全攻略 - 躺坑后亲诉心路历程

    目录 基本原理 方法1 - 本机Windows下建站 (力荐) 下载安装node.js 用管理员权限打开命令行,安装hexo-cli和hexo 下载安装git 初始化hexo 使用hexo gener ...

  8. Uix Kit 快速建站前端开发套件-工具箱

    这个产品维护已经有一年了(由于业务需求不同,目前没有做中文版,产品本身是针对国外网站),自己本身是做UI出生,开发只是业余爱好,仅仅作为平时工作的需要.杂七杂八会一些前后端开发.并非职业码农! 我是一 ...

  9. nodejs建站+github page 建站问题总结

    本文介绍 昨天吃晚饭的时候,在B站偶然看到一个关于搭建自己博客的视频,过程讲的很详细,于是就有了自己想尝试一下的冲动,所以,在晚上的时候,尝试了下,但是,过程并没有视频中说的那么顺利,看了网上很多帖子 ...

随机推荐

  1. 实践1-qq邮箱主页

    纯html的网页 采用table分割板块进行布局 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ...

  2. lal

    import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.F ...

  3. BZOJ1580 : [Usaco2009 Hol]Cattle Bruisers 杀手游戏

    以贝茜为参照物,则贝茜固定于原点,每个杀手是一个圆心在某条射线上的圆. 解出每个杀手可以射杀贝茜的时间区间,然后扫描线即可,时间复杂度$O(n\log n)$. #include<cstdio& ...

  4. BZOJ4123 : [Baltic2015]Hacker

    黑掉的一定是一个长度为$\lfloor\frac{n+1}{2}\rfloor$的区间. 于是枚举初始点,然后查询包含它的区间的最小值. 通过维护前后缀最小值+单调队列$O(n)$解决. #inclu ...

  5. SqlServer主键外键添加及判断表是否存在

    GO --判断表是否存在方式1 if object_id(N'EF_User',N'U') is null --判断表是否存在方式2 --if not exists (select * from db ...

  6. javascript第二弹——函数

    什么是函数 函数是一块javascript代码,被定义一次,就可以执行和调用多次:函数也是js对象,所以也可以像对象那样操作和传递:所以我们也把函数称之为函数对象: 创建函数的几种方法 一.函数声明 ...

  7. Oracle中Clob类型处理解析

    最近利用NHibernate映射类型为Clob字段在插入数据时发现当字符的字节数(一个半角字符一个字节,一个全角字符两个字节)在2000-4000之间时报错(ORA-01461:仅可以插入LONG列的 ...

  8. win7 无法复制粘贴

     win7 无法复制粘贴解决办法 在开始-运行里输入以下命令 regsvr32 shdocvw.dll ,确定,接着出现一个消息框,确定 regsvr32 oleaut32.dll,确定,接着出现一个 ...

  9. 用edtftpj实现Java FTP客户端工具

    edtftpj是一个java FTP工具包,使用非常方便,感觉比Apache的好用,但Apache更灵活.edtftpj有多种版本,分别是java..net和js版本.对于Java版的有一个免费版本. ...

  10. Qt Creator Shortcuts 快捷键大全

    编号 快捷键 功能 1 Esc 切换到代码编辑状态 2 F1 查看帮助(选中某一类或函数,按下F1,出现帮助文档) 3 F2 在光标选中对象的声明和定义之间切换(和Ctrl+鼠标左键一样的效果,选中某 ...