网站环境:使用express框架、bootstrap样式、jade模板、mongoose数据库

npm insatll express -g
npm insatll jada -g
npm insatll mongoose -g

1、创建express工程:myMovie

进入工程执行npm install,npm start 后 访问很正常,可以往下继续了

2、创建路由,打通入口

初拟可能浏览的入口================

网站跟目录:localhost:3000/

某个电影详情页:localhost:3000/movie/1

后台电影添加页:localhost:3000/admin/add

后台列表页:localhost:3000/admin/list

根据所需修改app.js

var express = require("express");
var app=express(); //访问网站跟目录:localhost:3000/
app.get("/",function(req,res){
res.send("网站首页");
}); //localhost:3000/movie/1
app.get("/movie/:id",function(req,res){
res.send("电影详情");
}); //localhost:3000/admin/add
app.get("/admin/add",function(req,res){
res.send("后台电影添加页");
}); //localhost:3000/admin/list
app.get("/admin/list",function(req,res){
res.send("后台电影列表");
}); app.listen(3030,function(){
console.log("请访问http://localhost:3030");
});

3、jade准备视图

index.jade主页、add.jade后台添加页、detail.jade(电影详情)、list.jade(后台电影列表)的准备,为了便于观察,放入基本的信息,用于关联jade视图

app.js

var express = require("express");
var app=express();
var path = require('path'); //设置模板引擎
app.set("view engine",'jade');
app.set('views','./views/pages'); //设置静态资源
app.use(express.static(path.join(__dirname, './public'))); //访问网站跟目录:localhost:3000/
app.get("/",function(req,res){
res.render('index.jade',{
title:'网站首页',
movies:{}
});
}); //localhost:3000/movie/1
app.get("/movie/:id",function(req,res){
res.render('detail.jade',{
title:'电影详情',
movie:{}
})
}); //localhost:3000/admin/add
app.get("/admin/add",function(req,res){
res.render('control.jade',{
title:'后台电影添加页',
movie:{}
});
}); //localhost:3000/admin/list
app.get("/admin/list",function(req,res){
res.render('list.jade',{
title:'后台电影列表',
movies:{}
});
}); app.listen(3000,function(){
console.log("请访问http://localhost:3000");
});

layout.jade

doctype html
html
head
meta(charset="utf-8")
title #{title}
include ./includes/link.jade
body
include ./includes/header.jade
block content

header.jade

.container
.row
.page-header
h1 #{title}

index.jade、control.jade、detail.jade、list.jade

extends ../layout.jade
block content

4、jade数据伪造

app.js

var express = require("express");
var app=express();
var path = require('path'); //设置模板引擎
app.set("view engine",'jade');
app.set('views','./views/pages'); //设置静态资源
app.use(express.static(path.join(__dirname, './public'))); //访问网站跟目录:localhost:3000/
app.get("/",function(req,res){
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
app.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:'#'
}
})
}); //localhost:3000/admin/add
app.get("/admin/add",function(req,res){
res.render('control.jade',{
title:'后台电影添加页',
movie:{
title:'',
director:'',
country:'',
language:'',
year:'',
poster:'',
summary:'',
flash:''
}
});
}); //localhost:3000/admin/list
app.get("/admin/list",function(req,res){
res.render('list.jade',{
title:'后台电影列表',
movies:[
{
_id:1,
title:'海绵宝宝3D',
director:'保罗·蒂比特'
}
]
});
}); app.listen(3000,function(){
console.log("请访问http://localhost:3000");
});

index.jade

extends ../layout.jade
block content
.container
.row
each item in movies
.col-md-2
.thumbnall
a(href="/movie/#{item._id}")
img(src="#{item.poster}",alt="#{item.title}")
.caption
h3 #{item.title}
p: a.btn.btn-primary(href="/movie/#{item._id}") 查看详情

detail.jade

extends ../layout.jade
block content
.container
.row
.col-md-7
video(src="#{movie.flash}",autoplay="true",width="720",height="400")
.col-md-5
dl.dl-horizontal
dt 电影名字
dd=movie.title
dt 导演
dd=movie.director
dt 国家
dd=movie.country
dt 上映年份
dd=movie.year
dt 简介
dd=movie.summary

list.jade

extends ../layout.jade
block content
.container
.row
table.table.table-hover.table-bordered
thead
tr
th 电影名字
th 导演
th 查看
th 更新
th 删除
tbody
each item in movies
tr
td #{item.title}
td #{item.director}
td: a(target="_blank",href="../movie/#{item._id}") 查看
td: a(target="_blank",href="../movie/update/#{item._id}") 修改
td
a.btn.btn-danger.del(type="button",href="/admin/delete?id=#{item._id}") 删除

control.jade

extends ../layout.jade
block content
.container
.row
form.form-horizontal(method="post",action="/admin/movie/do")
//电影名字
.form-group
label.col-sm-2.control-label(for="inputTitle") 电影名字:
.col-sm-10
input#inputTitle.form-control(type="text",name="movie[title]",value="#{movie.title}")
//导演
.form-group
label.col-sm-2.control-label(for="inputTitle") 导演:
.col-sm-10
input#inputDirector.form-control(type="text",name="movie[director]",value="#{movie.director}")
//国家
.form-group
label.col-sm-2.control-label(for="inputCountry") 国家:
.col-sm-10
input#inputCountry.col-sm-10.form-control(type="text",name="movie[country]",value="#{movie.country}")
//语言
.form-group
label.col-sm-2.control-label(for="inputLanguage") 语言:
.col-sm-10
input#inputLanguage.col-sm-10.form-control(type="text",name="movie[language]",value="#{movie.language}")
//上映年份
.form-group
label.col-sm-2.control-label(for="inputYear") 上映年份:
.col-sm-10
input#inputYear.col-sm-10.form-control(type="text",name="movie[year]",value="#{movie.year}")
//简介
.form-group
label.col-sm-2.control-label(for="inputSummary") 简介:
.col-sm-10
input#inputSummary.col-sm-10.form-control(type="text",name="movie[summary]",value="#{movie.summary}")
.form-group
.col-sm-2
.col-sm-10
input.btn.btn-default(type="submit",name="submit")

各页效果预览

下载>>

目前,静态页面已经准备完毕,接着将接入mongodb

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

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

    作为一个真正的网站,不能没有数据的支持,下面使用的数据库为mongodb,电影可能有的数据:电影名称.导演.国家.语言.上映时间.图片.简介.视频 4.使用路由 app.js var express ...

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

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

  3. Hexo 静态博客指南:建站教程(上)

    本文最初发布于我的个人博客Bambrow's Blog,采用 BY-NC-SA 许可协议,转载请注明出处.若有后续更新,将更新于原博客.欢迎去我的博客阅读更多文章! 本文详细记录一下站点建立过程,以便 ...

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

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

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

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

  6. WAP自助建站平台娃派宣布关闭 感谢建站之路有你的启蒙

    如题所示的这篇文章是我心血来潮在网上搜索到的,写的挺让我感同身受的,不妨先看一下原文吧. 原文 不知是偶然还是"冥冥定数",最后一次访问娃派建站(wap.ai)已有数十月之久了,突 ...

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

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

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

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

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

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

随机推荐

  1. html加强

    <html> <head><title>hello</title></head> <body> <p>段落</ ...

  2. SCU3109 Space flight(最大权闭合子图)

    嗯,裸的最大权闭合子图. #include<cstdio> #include<cstring> #include<queue> #include<algori ...

  3. AngularJS 表单提交后显示验证信息与失焦后显示验证信息

    虽然说AngularJS的实时表单验证非常有用,非常高效方便,但是当用户还没有完成输入时便弹出一个错误提示,这种体验是非常糟糕的. 正常的表单验证逻辑应该是在用户提交表单后或完成当前字段中的输入后,再 ...

  4. SplendidCRM 如何添加及使用中文语言包

    SplendidCRM 功能很强大,也支持多国语言,但关于中文语言安装的介绍在网上一直都找到,自已摸索了一下,成功使SplendidCRM应用中文,以下是安装方法. 版本号:SplendidCRM 7 ...

  5. BZOJ3836 : [Poi2014]Tourism

    对于一个连通块,取一个点进行dfs,得到一棵dfs搜索树,则这棵树的深度不超过10,且所有额外边都是前向边. 对于每个点x,设S为三进制状态,S第i位表示根到x路径上深度为i的点的状态: 0:选了 1 ...

  6. TextBlock 格式化内容

    Text="{Binding ContentName,StringFormat=分享好书\{0\}}"

  7. Windows Phone 7之XNA游戏:重力感应

    Windows Phone XNA游戏提供的重力传感器可以利用量测重力的原理判手机移动的方向,允许使用者利用摇动或甩动手机的方式控制游戏的执行,其原理和汽车的安全气囊相同,在侦测到汽车快速减速的时候立 ...

  8. 【BZOJ】3850: ZCC Loves Codefires(300T就这样献给了水题TAT)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3850 题意:类似国王游戏....无意义.. #include <cstdio> #inc ...

  9. 【wikioi】1690 开关灯(线段树)

    http://wikioi.com/problem/1690/ 这题可不能算是水题了.. 在线段树中,我只想到了lazy改变,但是没想到lazy变后size怎么变,我的策略变成了lazy为0时size ...

  10. [BZOJ 2631]tree

    裸LCT..QAQ写了三遍没写对 真是老了..QAQ 主要错的地方是 init: size[i] = sum[i] = val[i] = mul[i] = 1; pushdown: 注意判断左右儿子是 ...