我的post頁為什么在路由的時候告訴我
TypeError: Cannot read property '_id' of undefined
at app.get.Movie.fetch.res.render.title (D:\Mooc\app.js:80:25)
請高手指教啊
我的post頁為什么在路由的時候告訴我
TypeError: Cannot read property '_id' of undefined
at app.get.Movie.fetch.res.render.title (D:\Mooc\app.js:80:25)
請高手指教啊
2014-08-29
舉報
2016-01-04
var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: true }));
即可。
2015-03-06
之前遇到了這個問題,但是測試的時候將year填了字符串類型,后來填了Number類型,就對了。。。
2015-02-04
這個問題解決之后,有沒有這個錯誤呢
Cannot call method 'save' of undefined
2014-09-27
?我也遇到這個問題 ?相當惱火啊
2014-09-19
為什么我改了以后還是報錯,錯誤是“Cannot read property 'movie' of undefined”。應該還是body-parser解析的問題,但查了半天都不明白錯在哪里。還能如何修改
2014-09-05
奎屯大哥大
2014-08-29
終于搞明白了,就是body-parser的問題,暈暈乎乎的看了半天的GitHub上關于express/bodyparser的說明,并反復試驗,最終在app.js中使用下面的分析器可以繼續了app.use(bodyParser.urlencoded({ extended: true })),謝謝大家
2014-08-29
我已經確認了,是和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時就會報錯。
請問老師怎么才能正常解析呢?
2014-08-29
怎么感覺是我的“body-parser”的問題啊,我好像將原來的app.use(express.bodyParser())替換以后好像沒法解析了,求解?
2014-08-29
而且,我覺得這段代碼的意思是從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
})
})
})