作为一个真正的网站,不能没有数据的支持,下面使用的数据库为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. stack UVA 442 Matrix Chain Multiplication

    题目传送门 题意:给出每个矩阵的行列,计算矩阵的表达式,如果错误输出error,否则输出答案 分析:表达式求值,stack 容器的应用:矩阵的表达式求值A 矩阵是a * b,B 矩阵是b * c,则A ...

  2. POJ2762 Going from u to v or from v to u?(判定单连通图:强连通分量+缩点+拓扑排序)

    这道题要判断一张有向图是否是单连通图,即图中是否任意两点u和v都存在u到v或v到u的路径. 方法是,找出图中所有强连通分量,强连通分量上的点肯定也是满足单连通性的,然后对强连通分量进行缩点,缩点后就变 ...

  3. HDU 3065 (AC自动机模板题)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3065 题目大意:多个模式串,范围是大写字母.匹配串的字符范围是(0~127).问匹配串中含有哪几种模 ...

  4. Eclipse开发JavaWeb程序报Server Tomcat v7.0 at localhost was unable to start

    出处:http://www.javaweb1024.com/info/582.jspx 原因重现: Eclipse开发JavaWeb程序,启动Servers的Tomcat服务器,突然跳出弹出框,内容显 ...

  5. iOS开发之--UITextField属性

    UITextField属性 0.     enablesReturnKeyAutomatically 默认为No,如果设置为Yes,文本框中没有输入任何字符的话,右下角的返回按钮是disabled的. ...

  6. 8.按要求编写Java应用程序。 (1)建立一个名叫Cat的类: 属性:姓名、毛色、年龄 行为:显示姓名、喊叫 (2)编写主类: 创建一个对象猫,姓名为“妮妮”,毛色为“灰色”,年龄为2岁,在屏幕上输 出该对象的毛色和年龄,让该对象调用显示姓名和喊叫两个方法。

    package liu0917; public class Cat { String name="妮妮"; int age=2; String maose="灰色&quo ...

  7. Linux 高级网络编程

    设置套接字函数: #include<sys/socket.h> int setsockopt(int sockfd, int level, int optname, const void* ...

  8. 3种用组策略将域帐号加入本地管理员组的方法_jinifly_新浪博客

    次当前系统域帐号是怎么在第一次登录时,自动加入域客户端本地管理员组的?我猜不外乎就是脚本.计算机策略或虚拟机初始化的自动应答脚本,结果系统的前任同事找到了答案--GPO的用户策略(确切讲是用户首选项) ...

  9. 移动Web单页应用开发实践——实现Pull to Request(上/下拉请求操作)

    在单页应用开发中,无论是页面结构化,还是Pull to Request,都离不开一个技术——页面局部滚动.当下的移动web技术,主要使用下面两种方式实现局部区域的滚动: 基于IScroll组件,也有很 ...

  10. PHP 开启短标签

    <?=STATIC_URL?> 让上面的语句可以正常运行,等同于下面的语句 <?php echo STATIC_URL;?> 可以在 php.ini 中找到 short_ope ...