亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

希望對后來的朋友有幫助,第一期主文件代碼和注釋

我是在2016-9-19號完成第一期內容的,本期的所有功能已經通過測試。

建議剛接手node的朋友,最好看一下node權威指南這本書(中文的),掌閱有此書。

建議看看mongoose的文檔,這能理解該視頻中對數據模型和數據靜態方法的編寫

建議大家一定要安裝和初步使用mongodb,這個很重要

一定要小心jade,很多時候會卡在jade某個地方的拼寫錯誤導致數據讀取失敗。

下面是我的app.js文件,希望對剛來的小伙伴有用吧

//?express?node應用搭建模塊
var?express?=?require('express');

//?加載表單序列化模塊
var?bodyParser?=?require('body-parser');
//?parse?application/x-www-form-urlencoded
//?這里如果不用app.use(),就需要在post請求中加入該模塊作為數據處理中間件
//?app.post(請求路徑,中間件,回調函數)
//?var?urlencoded?=?bodyParser.urlencoded({?extended:?true?});
//?app.post('/admin/movie/new',?urlencoded,?function(req,?res){});

//?加載mongoDB數據處理模塊
var?mongoose?=?require('mongoose');

//?加載mongoDB數據模型集
var?Movie?=?require('./models/movie');

//?加載函數庫
//?Underscor.js定義了一個下劃線(_)對象,類似jquery的$
//?函數庫的所有方法都屬于這個對象。這些方法大致上可以分成:
//?集合(collection)、數組(array)、函數(function)、
//?對象(object)和工具(utility)五大類
//?說白了就是一個對以上數據有強大處理能力的模塊
var?_?=?require('underscore');


//?加載路徑處理模塊
//?該模塊能規范的輸出模塊路徑
//?這里主要是兼容多服務端的路徑訪問
//?沒有此模塊也能正常運行
var?path?=?require('path');

//?端口設置
//?process.env.PORT?這里是指Node環境中默認的端口
var?port?=?process.env.PORT?||?3000;

//?創建服務應用實例
var?app?=?express();

//?連接數據庫
//?這里需要安裝Mongodb,并且要啟動mongodb服務
mongoose.connect('mongodb://127.0.0.1:27017/imovie');

//?設置視圖路徑
app.set('views','./views/pages');
//?設置模板引擎為jade
app.set('view?engine','jade');

//?express4版本內置的靜態資源讀取express.static()
//?指定讀取靜態資源的路徑為public文件夾
//?這里主要是加載bootstrap中的?css?js)
//?__dirname變量獲取當前模塊文件所在目錄的完整絕對路徑
//?app.use()是干啥的呢?
//?app.use?加載用于處理http請求的middleware(中間件),
//?當一個請求來的時候,會依次被這些?middlewares處理
app.use(?express.static(?path.join(__dirname,?'public')?)?);

app.use(bodyParser.urlencoded({?extended:?true?}));

//?加載時間處理模塊
//?app.locals對象字面量中定義的鍵值對,
//?是可以直接在模板中使用的,
//?就和res.render時開發者傳入的模板渲染參數一樣
//?這里是指可以在模板中使用moment方法
//?在list.jade中我們需要將數據中的時間轉換成mm/dd/yyyy
//?那么就需要用到moment,所以這里是為了將該方法能傳入到模板中
//?這里如果換成app.locals.dateFun?=?require('moment');
//?在list模板中我們就需要?#{dateFun(xxxxx).format(MM/DD/YYYY)}
app.locals.moment?=?require('moment');


//?加載index?page并指定訪問路徑
app.get('/',function(req,res){
??Movie.fetch(function(err,movies){
????if(err)?{
??????console.log(err);
????}

????res.render('index',?{
??????title?:?'Imovie?首頁',
??????movies:?movies
????});
??});
});

//?加載detail?page
//訪問路徑就是localhost?:3000/movie/id?
app.get('/movie/:id',function(req,res){
??
//?req.params?獲取路徑變量值,這里指id這個變量
??var?id?=?req.params.id;

??Movie.findById({_id:id},?function(err,movie)?{
????res.render('detail',{
??????title:'Imovie'+movie.title,
??????movie:?movie
????});
??});

});


//?加載admin?page
app.get('/admin/movie',function(req,res){
??res.render('admin',{
????title:'Imovie錄入',
????movie:?{
??????title:?'',
??????doctor:?'',
??????country:?'',
??????poster:?'',
??????language:?'',
??????flash:'',
??????summary:?'',
??????year:?''
????}
??});
});


//admin?uodate?movie
app.get('/admin/update/:id',function(req,res){
??
??var?id?=?req.params.id;
??if(id){
????Movie.findById(id,function(err,movie){
??????res.render('admin',{
????????title:?'Imovie更新',
????????movie:?movie
??????});?
????});
??}
??
});


//admin?post?movie??urlencoded,?
app.post('/admin/movie/new',?function(req,?res)?{
???
??if(!req.body)?return?res.sendStatus(400);
?
??var?id?=?req.body.movie._id;
??var?movieObj?=?req.body.movie;
??var?_movie;
??
??if(?id?!=?'undefined'?&&?id?!=?''?)?{

????console.log('take?hello');
????console.log(id);

????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({
??????title:?movieObj.title,
??????doctor:?movieObj.doctor,
??????country:?movieObj.country,
??????language:?movieObj.language,
??????poster:?movieObj.poster,
??????flash:?movieObj.flash,
??????year:?movieObj.year,
??????summary:?movieObj.summary
????});
????_movie.save(function(err,movie){
??????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?:?'Imove列表',
??????movies:?movies,
????});
??});
});


//?接收刪除請求
app.delete('/admin/list',function(req,?res)?{
??//?req.query?主要獲取到客戶端提交過來的鍵值對
??//?'/admin/list?id=12',這里就會獲取到12
??var?id?=?req.query.id;
??console.log(id);

??if(id)?{
????Movie.remove({_id:?id},?function(err)?{
??????if(?err?)?{
????????console.log(err);
??????}else{
????????res.json({success:?1});
??????}
????});
??}

});

//?監聽端口
app.listen(port);
console.log('imovie?started?on?port:'?+port);

其他文件可以看我的github項目地址


正在回答

5 回答

感謝大神!

0 回復 有任何疑惑可以回復我~
#1

慕函數6472736 提問者

這是鼓勵我要當大神啦,我要加油??!
2016-10-17 回復 有任何疑惑可以回復我~

第93行 如果根據視頻的話,findById的第一個參數是個id(num類型)

Movie.findById(id,function(err,movie){


0 回復 有任何疑惑可以回復我~

剛剛學習數據,環沒有弄懂數據怎么錄入,整個視頻好像都沒有涉及怎么建立數據庫,是不是我們自己要把之前的數據建立起來?

0 回復 有任何疑惑可以回復我~
#1

慕函數6472736 提問者

建議看看mongodb的簡單操作,如果你對mysql熟悉或者使用過,那你就明白這里數據庫是如何建立的。還有就是mongoose的使用要了解一下,這樣你就會比較清楚該項目是如何操作數據的。 該項目里是使用mongoose模塊來創建數據庫和數據集的,所以不需要特地單獨使用mongodb來建立數據庫
2017-01-15 回復 有任何疑惑可以回復我~
#2

慕函數6472736 提問者

其實視頻里有數據庫建立和錄入,只是沒有特意講解,建議你可以看看mongodb和mongoose的基礎視頻,這樣有助于填坑
2017-01-15 回復 有任何疑惑可以回復我~

movies: movies

ReferenceError: movies is not defined

? ? at D:\Program Files\nodejs\project\imooc\app.js:34:17

這里報錯,請問題主知道什么問題嗎?

0 回復 有任何疑惑可以回復我~
#1

慕函數6472736 提問者

有沒有具體的代碼呢?出錯行的代碼是怎么樣的? 個人感覺這里可能是讀取數據出錯, 建議在剛開始時對涉及數據讀取的每一步都最好能做一個簡單的代碼測試,防止代碼寫復雜后不好發現錯誤,保證前后的基礎數據暢通這個有利于后面的深入數據操作,一般來說寫nodejs出錯比較少,容易出錯且不易發現的地方在于jade文件格式錯誤導致表單數據提交出錯,這也就可能連鎖導致數據庫讀取出錯,還有就是jade里的的表達式也容易導致出錯,如果這些都沒有問題,那就可能是表單序列化出錯,如果是序列化的問題,建議后臺打印出提交的數據或獲取到的數據看是否有問題
2017-01-11 回復 有任何疑惑可以回復我~
#2

慕函數6472736 提問者

嗯,我猜你的是獲取主頁get(/)時得不到電影數據,你檢查一下你的mongoose操作文件,應該是這里面出了問題,建議你單獨通過movie這個數據模版來錄入數據,看錄入數據是否正常,讓后再讀取數據看能不能讀取出數據,你應該是數據操作有地方出錯了
2017-01-11 回復 有任何疑惑可以回復我~

感謝樓主,根據你提供的代碼,終于找到我出BUG的地方了,不細心啊

0 回復 有任何疑惑可以回復我~
#1

慕函數6472736 提問者

若對你有幫助,我就很高興!
2016-10-17 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
node+mongodb 建站攻略(一期)
  • 參與學習       91828    人
  • 解答問題       921    個

帶你完整實現一個從前端到后端的項目,初中級前端開發工程師必學課程

進入課程

希望對后來的朋友有幫助,第一期主文件代碼和注釋

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號