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

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

關于 Cannot read property '_id' of undefined 和 _movie.save of undefined 報錯問題,個人已解決

第一個問題:Cannot read property '_id' of undefined

分析:

??? form表單在提交時采用的是 enctype="multipart/form-data" 二進制編碼的方式傳遞參數,請求體見【圖一】
而我在其它項目使用post提交時是【圖二】這種 "鍵":"值" 對數據關系。

5734a9fd00015a4505000337.jpg5734a9fd0001154902780203.jpg

解決:

??? 所以刪除form表單中的二進制編碼,在cmd中可以看到獲取的_id值(我在/admin/movie 路由中傳遞了 "_id": "1"的值)


第二個問題:_movie.save of undefined

分析:

????????一看到這個報錯時,我就去查了nodejs的官方文檔,去找save方法,結果是 沒寫錯

????????然后就向上找,打印了相關的數據,為

????????console.log("這是前臺傳遞的表單數據:"?+?movieObj);??//req.body.movie?值為?[object?object]?正常
????????console.log("這是underscore.js中extend()方法執行后movie的值:"?+?movie);????//值為?undefined?不正常

????????這時,問題就出現在

????????_.extend(movie,?movieObj)

????????然后去查找 underscore.js 中 extend方法的解釋

???????_.extend(destination,?*sources)????????
??復制source對象中的所有屬性覆蓋到destination對象上,并且返回?destination?對象.
??復制是按順序的,?所以后面的對象屬性會把前面的對象屬性覆蓋掉(如果有重復).

????????明白了該方法后打印了 通過findById()方法查詢數據庫出來的movie的值

????????console.log("這是從數據庫通過id查找出來的數據:"?+?movie);????//值為?undefined

??????? http://img1.sycdn.imooc.com//5734aad700015ba504700138.jpg

????????這時第二個問題的結揪出來

????????在extend()方法中 movie 為 destination,前臺傳遞的參數 movieObj 為 sources。而現在通過查詢id獲取的 movie= undefined

,所以 _movie的值為undefined,才會出現 _movie.save of undefined。

????????那么,在這時就需要去思考 if( id !== "undefined") 這個判定條件是不是出錯了!

????????因為,我們需要在數據庫有該電影字段(通過查詢id值)時去更新數據;在沒有該電影數據時去完整插入該數據。


?所以這時,我在數據庫中手動插入了一條數據。

第一步:通過list電影列表頁進入該電影修改頁面,提交參數。這時,代碼的確走了 if 為true時的代碼塊

第二步:新增一條數據時,提交參數,這時,代碼沒有走else 下的代碼塊,而是走了條件為true的 _.extend()的更新數據

原因: if 的判定條件有問題

解決:

????修改 if( id !== 'undefined') 為 if (id != '')

??? 程序運行正常


??


正在回答

2 回答

問題:再次出現一個錯誤!電影錄入時若 片源地址 中傳入的數據不正常,服務器掛載

在電影錄入頁中,片源地址若傳遞的參數為空時,數據正常存儲到數據庫,并跳轉到/movie/:id 電影的詳情頁

若片源地址(movie[flash])傳遞的參數為非URL格式,數據可以存儲到數據庫

http://img1.sycdn.imooc.com//57353dd8000126d208210029.jpg

router.get('/movie/:id',?function(req,?res)?{
??var?id?=?req.params.id;
??Movie.findById(id,?function(err,?movie)?{
??????console.log("電影id:"?+?id);
??????console.log("電影title:"?+?movie.title)
????res.render('detail',?{
??????title:?movie.title,
??????movie:?movie
????});
??})
});

程序執行了一次,即POST下打印出來的2條信息,隨后就執行res.render加載detail.jade模板,但是隨后又執行了一次

?????console.log("電影id:"?+?id);????//執行的結果實際為?movie[flash]的值?。。?!
??????console.log("電影title:"?+?movie.title)????//這時就開始報錯,服務器掛載

http://img1.sycdn.imooc.com//57353df60001b2b405230269.jpg

但是此時會進入 detail頁,頁面渲染數據都正常,但是服務器掛了


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

后期補錄一下,不需要更改 判定條件

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

誰說無愛 提問者

(⊙o⊙)…這個就當我沒說
2016-05-13 回復 有任何疑惑可以回復我~
#2

songjum

更改判斷條件后依舊報錯?
2016-11-10 回復 有任何疑惑可以回復我~

舉報

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

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

進入課程

關于 Cannot read property '_id' of undefined 和 _movie.save of undefined 報錯問題,個人已解決

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

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

幫助反饋 APP下載

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

公眾號

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