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
});
}); });
终极测试:
先清除所有表数据

添加一条

添加后列表:

编辑

编辑后列表

删除后列表

Nodejs电影建站开发实例(下)的更多相关文章
- Nodejs电影建站开发实例(上)
网站环境:使用express框架.bootstrap样式.jade模板.mongoose数据库 npm insatll express -g npm insatll jada -g npm insat ...
- Mac电脑 阿里云ECS(ContentOS) Apache+vsftpd+nodejs+mongodb建站过程总结
简介:我这里采用的阿里云免费提供的6个月ECS服务器:制作了一个简单的爬虫程序:里面很多功能还么做:搜索里面功能回去的数据未做处理会崩溃(大家不要点搜索功能):地址:http://loldragon. ...
- 在mvc4中多语言建站的实例
环境:vs2012 asp.net mvc4. 实现方式:resource 资源文件,根据路由规则中Lang参数来判断载入哪种语言方式 在网上找到了相关资料,顺便自己做了个练习,新建工程之类的步骤就免 ...
- [web建站] 优课急送《零基础快速学习建站》视频+课件【价值399元】
[课程介绍]你想快速建一个网站出来吗?你想从什么都不懂到一两天出一个漂漂亮亮的站吗?你想完成领导交给你的任务找人建站吗?你想自己建站来创业吗?你想学会建站之后,利用给别人建站来赚钱吗?你想建一个跟某个 ...
- [web建站] 极客WEB大前端专家级开发工程师培训视频教程
极客WEB大前端专家级开发工程师培训视频教程 教程下载地址: http://www.fu83.cn/thread-355-1-1.html 课程目录:1.走进前端工程师的世界HTML51.HTML5 ...
- Nodejs学习笔记(三)——一张图看懂Nodejs建站
前言:一条线,竖着放,如果做不到精进至深,那就旋转90°,至少也图个幅度宽广. 通俗解释上面的胡言乱语:还没学会爬,就学起走了?! 继上篇<Nodejs学习笔记(二)——Eclipse中运行调试 ...
- 开发小白也毫无压力的hexo静态博客建站全攻略 - 躺坑后亲诉心路历程
目录 基本原理 方法1 - 本机Windows下建站 (力荐) 下载安装node.js 用管理员权限打开命令行,安装hexo-cli和hexo 下载安装git 初始化hexo 使用hexo gener ...
- Uix Kit 快速建站前端开发套件-工具箱
这个产品维护已经有一年了(由于业务需求不同,目前没有做中文版,产品本身是针对国外网站),自己本身是做UI出生,开发只是业余爱好,仅仅作为平时工作的需要.杂七杂八会一些前后端开发.并非职业码农! 我是一 ...
- nodejs建站+github page 建站问题总结
本文介绍 昨天吃晚饭的时候,在B站偶然看到一个关于搭建自己博客的视频,过程讲的很详细,于是就有了自己想尝试一下的冲动,所以,在晚上的时候,尝试了下,但是,过程并没有视频中说的那么顺利,看了网上很多帖子 ...
随机推荐
- stack UVA 442 Matrix Chain Multiplication
题目传送门 题意:给出每个矩阵的行列,计算矩阵的表达式,如果错误输出error,否则输出答案 分析:表达式求值,stack 容器的应用:矩阵的表达式求值A 矩阵是a * b,B 矩阵是b * c,则A ...
- POJ2762 Going from u to v or from v to u?(判定单连通图:强连通分量+缩点+拓扑排序)
这道题要判断一张有向图是否是单连通图,即图中是否任意两点u和v都存在u到v或v到u的路径. 方法是,找出图中所有强连通分量,强连通分量上的点肯定也是满足单连通性的,然后对强连通分量进行缩点,缩点后就变 ...
- HDU 3065 (AC自动机模板题)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3065 题目大意:多个模式串,范围是大写字母.匹配串的字符范围是(0~127).问匹配串中含有哪几种模 ...
- Eclipse开发JavaWeb程序报Server Tomcat v7.0 at localhost was unable to start
出处:http://www.javaweb1024.com/info/582.jspx 原因重现: Eclipse开发JavaWeb程序,启动Servers的Tomcat服务器,突然跳出弹出框,内容显 ...
- iOS开发之--UITextField属性
UITextField属性 0. enablesReturnKeyAutomatically 默认为No,如果设置为Yes,文本框中没有输入任何字符的话,右下角的返回按钮是disabled的. ...
- 8.按要求编写Java应用程序。 (1)建立一个名叫Cat的类: 属性:姓名、毛色、年龄 行为:显示姓名、喊叫 (2)编写主类: 创建一个对象猫,姓名为“妮妮”,毛色为“灰色”,年龄为2岁,在屏幕上输 出该对象的毛色和年龄,让该对象调用显示姓名和喊叫两个方法。
package liu0917; public class Cat { String name="妮妮"; int age=2; String maose="灰色&quo ...
- Linux 高级网络编程
设置套接字函数: #include<sys/socket.h> int setsockopt(int sockfd, int level, int optname, const void* ...
- 3种用组策略将域帐号加入本地管理员组的方法_jinifly_新浪博客
次当前系统域帐号是怎么在第一次登录时,自动加入域客户端本地管理员组的?我猜不外乎就是脚本.计算机策略或虚拟机初始化的自动应答脚本,结果系统的前任同事找到了答案--GPO的用户策略(确切讲是用户首选项) ...
- 移动Web单页应用开发实践——实现Pull to Request(上/下拉请求操作)
在单页应用开发中,无论是页面结构化,还是Pull to Request,都离不开一个技术——页面局部滚动.当下的移动web技术,主要使用下面两种方式实现局部区域的滚动: 基于IScroll组件,也有很 ...
- PHP 开启短标签
<?=STATIC_URL?> 让上面的语句可以正常运行,等同于下面的语句 <?php echo STATIC_URL;?> 可以在 php.ini 中找到 short_ope ...