3-2編寫數(shù)據(jù)庫交互代碼
ch3-項目數(shù)據(jù)庫實現(xiàn)
編寫數(shù)據(jù)庫交互(增改查)代碼
(定義好)模式schema,并(編譯好)模型model之后,再利用mongoose模塊連接本地數(shù)據(jù)庫
需要在本地預(yù)先安裝MongoDB
app.js
var express = require('express');
// var path = require('path'); //靜態(tài)資源目錄,新版express要獨立安裝static
var serveStatic = require('serve-static');
var bodyParser = require('body-parser');
var mongoose = require('mongoose');
var _ = require('underscore'); //根據(jù)新對象覆蓋老對象的值
var Movie = require('./models/movie'); //取得模型
var port = process.env.PORT || 3000;
var app = express();
mongoose.connect('mongodb://localhost/imooc'); //連接數(shù)據(jù)庫
app.set('views', './views/pages/'); //修改視圖模板目錄
app.set('view engine', 'jade');
// app.use(express.bodyParser()); //表單數(shù)據(jù)格式化,新版express不捆綁bodyParser
// app.use(express.static(path.join(__dirnamr, 'bower_components'))); //告訴express頁面請求中樣式和腳本的請求去path中查找
app.use(bodyParser.urlencoded());
// app.use(bodyParser.json({limit: '1mb'})); //body-parser 解析json格式數(shù)據(jù)
// app.use(bodyParser.urlencoded({ //此項必須在 bodyParser.json 下面,為參數(shù)編碼
// extended: true
// }));
app.use(serveStatic('bower_components'));
app.listen(port);
console.log('imooc started on port ' + port);
//路由
//index page
app.get('/', function(req, res){ //路由規(guī)則和URL地址相匹配
Movie.fetch(function(err, movies){ //獲取所有數(shù)據(jù)
if(err){
console.log(err);
}
res.render('index', { //渲染模板
title: 'imooc 首頁',
movies: movies
});
});
});
//detail page
app.get('/movie/:id', function(req, res){
var id = req.params.id;
Movie.findById(id, function(err, movie){ //獲取指定id電影數(shù)據(jù)
res.render('detail', {
title: 'imooc ' + movie.title,
movie: movie
});
});
});
//admin page
app.get('/admin/movie', function(req, res){
res.render('admin', {
title: 'imooc 錄入頁',
movie: {
doctor: '',
country: '',
title: '',
year: '',
poster: '',
language: '',
flash: '',
summary: ''
}
});
});
//admin update movie
app.get('/movie/update/:id', function(req, res){
var id = req.params.id;
if(id){
Movie.findById(id, function(err, movie){
res.render('admin', {
title: 'imooc 后臺更新頁',
movie: movie
});
});
}
});
//admin post movie
app.post('/admin/movie/new', function(req, res){
var movieObj = req.body.movie;
var id = movieObj._id;
if(id !== 'undefined'){
Movie.findById(id, function(err, movie){
if(err){
console.log(err);
}
_movie = _.extend(movie, movieObj);
_movie.save(function(err, movie){
if(err){
console.log(err);
}
res.redirect('/movie/' + movie._id);
});
});
}else{
_movie = new Movie({
doctor: movieObj.doctor,
title: movieObj.title,
country: movieObj.country,
language: movieObj.language,
year: movieObj.year,
poster: movieObj.poster,
summary: movieObj.summary,
flash: movieObj.flash,
});
_movie.save(function(err, movie){ //存儲數(shù)據(jù)
if(err){
console.log(err);
}
res.redirect('/movie/' + movie._id);
});
}
});
//list page
app.get('/admin/list/', function(req, res){
Movie.fetch(function(err, movies){
if(err){
console.log(err);
}
res.render('list', {
title: 'imooc 列表頁',
movies: movies
});
});
});