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

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

我的post頁為什么在路由的時候告訴我

TypeError: Cannot read property '_id' of undefined

    at app.get.Movie.fetch.res.render.title (D:\Mooc\app.js:80:25)

請高手指教啊

正在回答

10 回答

var bodyParser = require('body-parser');

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

即可。

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

weibo_顏卿同學_0

還是不行呀
2016-02-28 回復 有任何疑惑可以回復我~
#2

三號線先生0

請問你解決了嗎?
2016-07-06 回復 有任何疑惑可以回復我~

之前遇到了這個問題,但是測試的時候將year填了字符串類型,后來填了Number類型,就對了。。。

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

這個問題解決之后,有沒有這個錯誤呢

Cannot call method 'save' of undefined


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

?我也遇到這個問題 ?相當惱火啊

0 回復 有任何疑惑可以回復我~
var express = require('express')
var bodyParser = require('body-parser')
var path = require('path')
var mongoose = require('mongoose')
var _ = require('underscore')
var Movie = require('./models/movie')
var port = process.env.PORT || 3000
var app = express()

mongoose.connect('mongodb://localhost/imooc')

app.set('views', './views/pages')
app.set('view engine', 'jade')
app.use(bodyParser.urlencoded({ extended: true }))

// admin post movie
app.post('/admin/movie/new', function(res,req) {

	var id = req.body.movie._id     -----錯在這行
	var movieObj = req.body.movie
	var _movie
	

Jade 代碼:
extends ../layout

block content
	.container
		.row
			form.form-horizontal(method="post", action="/admin/movie/new")
				input(type="hidden", name="movie[_id]", value="#{movie._id}")
				.form-group
					label.col-sm-3.control-label(for="inputTitle") Name
					.col-sm-8
						input#inputTitle.form-control(type="text", name="movie[title]", value="#{movie.title}")

為什么我改了以后還是報錯,錯誤是“Cannot read property 'movie' of undefined”。應該還是body-parser解析的問題,但查了半天都不明白錯在哪里。還能如何修改

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

lingzi198853

你解決了么,我也是遇到這樣的問題,無法解決啊
2015-03-12 回復 有任何疑惑可以回復我~
#2

resetO

你的res 和 req寫反了
2016-01-22 回復 有任何疑惑可以回復我~

奎屯大哥大

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

終于搞明白了,就是body-parser的問題,暈暈乎乎的看了半天的GitHub上關于express/bodyparser的說明,并反復試驗,最終在app.js中使用下面的分析器可以繼續了app.use(bodyParser.urlencoded({ extended: true })),謝謝大家


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

stono

多謝多謝?。?!我也是遇到這個問題;沒想到您給搞定了?。?!
2015-01-31 回復 有任何疑惑可以回復我~
#2

lingzi198853

不是吧,我按您的來,為什么還是不能解決問題啊
2015-03-12 回復 有任何疑惑可以回復我~

我已經確認了,是和body-parser模塊有關系,因為我使用了新版本的git所以使用parser的方法可能有問題,我原先使用bodyParser.JOSN()是沒法解析request頁的,但是我試了所有的選項只有bodyParser.urlencoded({ extended: false })可以解析成

{}

{}

{}

{}

{}

{}

{ 'movie[_id]': 'undefined',

  'movie[Title]': 'asdfasdf',

  'movie[Director]': 'asdf',

  'movie[Country]': 'asdf',

  'movie[Language]': 'asdf',

  'movie[Poster]': 'asdf',

  'movie[Year]': 'asdf',

  'movie[Summary]': 'asdf' }

所以在使用var id = req.body.movie._id時就會報錯。

請問老師怎么才能正常解析呢?

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

int30xcc

不是新版本的git,是新版本的express
2014-09-03 回復 有任何疑惑可以回復我~
#2

lingzi198853

我也是啊
2015-03-12 回復 有任何疑惑可以回復我~

怎么感覺是我的“body-parser”的問題啊,我好像將原來的app.use(express.bodyParser())替換以后好像沒法解析了,求解?

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

而且,我覺得這段代碼的意思是從admin.jade中取名字聲明為name="movie[_id]"控件的值,但是我試了一下,req.body.movie可以取到,但是下面的各個屬性都取不到,不知道是為什么?。壳蠼獯?/p>


我的admin.jade和app.js如下:


extends ../layout


block content

.container

.row

form.form-horizontal(method="post", action="/admin/movie/new")

input(type="hidden", name="movie[_id]", value="#{movie._id}")

.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="inputDirector") 電影導演

.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.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.form-control(type="text", name="movie[Language]", value="#{movie.Language}")

.form-group

label.col-sm-2.control-label(for="inputPoster") 海報地址

.col-sm-10

input#inputPoster.form-control(type="text", name="movie[Poster]", value="#{movie.Poster}")

.form-group

label.col-sm-2.control-label(for="inputYear") 上映年份

.col-sm-10

input#inputYear.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.form-control(type="text", name="movie[Summary]", value="#{movie.Summary}")

.form-group

.col-sm-offset-2.col-sm-10

button.btn.btn-default(type="submit") 登錄







----- app.js



var express = require('express')

var path = require('path')

var mongoose = require('mongoose')

var _ = require('underscore')

var Movie = require('./modles/movie')

var bodyParser = require('body-parser')

var port = process.env.PORT || 3000

var app = express()


mongoose.connect('mongodb://localhost/MoocDB')


app.set('views', './views/pages')

app.set('view engine', 'jade')

app.use(bodyParser.json())

app.use(express.static(path.join(__dirname, 'bower_components')))

app.listen(port)


console.log('Mooc started on port ' + port)


// index page

app.get('/', function(req,res) {

Movie.fetch(function(err, movies) {

if(err) {

console.log(err)

}

res.render('index', {

title: 'Mooc 首頁',

movies: movies

})

})

})


// detail page

app.get('/movie/:id', function(req,res) {

var id = req.params.id

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

if(err) {

console.log(err)

}


res.render('detail', {

title: 'Mooc 詳情頁' + movie.Title,

movie: movie

})

})

})


// admin page

app.get('/admin/movie', function(req,res) {

res.render('admin', {

title: 'Mooc 后臺錄入頁',

movie: {

Director: '',

Country: '',

Title: '',

Year: '',

Poster: '',

Language: '',

Flash: '',

Summary: ''

}

})

})


// admin update 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: 'Mooc 后臺錄入頁',

movie: movie

})

})

}

})


// admin post movie

app.post('/admin/movie/new', function(req, res) {

var movieObj = req.body.movie

var id = req.body.movie._id

var _movie


if(id !== 'undefined') {

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

if(err) {

console.log(err)

}

_movie = _.extend(movie, movieObj)

console.log(_movie.Title)

//-_movie.save(function(err, movie) {

//- if(err) {

//- console.log(err)

//- }

//- res.redirect('/movie/' + movie._id) 

//-})

})

}

else {

_movie = new Movie({

Title: movieObj.Title,

Dirctor: movieObj.Dirctor,

Country: movieObj.Country,

Language: movieObj.Language,

Year: movieObj.year,

Poster: movieObj.Poster,

Summary: movieObj.Summary,

Flash: movieObj.Flash

})

console.log(_movie.Title)

//-_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: 'Mooc 列表頁',

movies: movies

})

})

})


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

舉報

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

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

進入課程
微信客服

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

幫助反饋 APP下載

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

公眾號

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