为了账号安全,请及时绑定邮箱和手机立即绑定

自己做完实验并对比了网上的源码,有几地方需要注意。

1.网上源码中有关body-parser()的问题。

    这个问题,我在以前的讨论中已经做了比较明确的说明,现在重新说一下,就是新版本的Git中已经不再使用app.use(express.bodyParser())这种方法引入解析器,同样网上源码中给出的app.use(bodyParser())这种方式也有问题,在服务启动时会被自动忽略掉,所以要使用app.use(bodyParser.urlencoded({ extended: true }))这种方式进行引用。另外由于extended的默认值为true,如果使用app.use(bodyParser.urlencoded())的方式引用在服务启动时会提示“body-parser deprecated undefined extended: provide extended option”,虽然不影响使用,但是感觉不爽。


2.网上源码中没有提及moment的引用。

    自己在做实验时发现在加入时间以后list页总是报错,

TypeError: views\pages\list.jade:24

    22|    td #{item.Country}

    23|    td #{item.Year}

  > 24|    td #{moment(item.meta.UpdateAt).format('MM/DD/YYYY')}

开始觉得应该是moment模块的问题,不过在源码中没有找到,于是又反反复复看了几遍教学视频才在老师实验的那个时候找到了问题,就是moment模块没有被引用进去。所以同学们要小心,所有实用到的模块都要被引用啊!!!引用方法:

app.local.moment = require('moment'),把这句话加在app.listen(PORT)之前就可以了。


3.不知道浏览器有什么问题。

    之前一直再使用360浏览器做测试,但是发现几个小问题:

    1)在后台录入页上lable和text不在同一行上,列表页没有缩进(很难看);

    2)在后台录入页提交以后redirect方法重定向到detail页上页面布局不对,反复刷新后可以正常。

    开始以为是自己的代码有问题,反复对照多次后确认没有问题,最后想到了浏览器,更换IE浏览器实验以后发现一切正常,害死人啊!!!!(这个问题我只试了这两个浏览器,其它浏览器是不是有同样问题没有验证)

    希望老师和同学们能帮忙解释一下上面的问题,谢谢

正在回答

25 回答

.math


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

http://img1.sycdn.imooc.com//551bb2490001590b06210233.jpg

这个错误是怎么回事呢?求帮助,急

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

g0ne

path.join
2015-04-14 回复 有任何疑惑可以回复我~

给楼主点赞!一是要引用moment模块,app.locals.moment = require('moment'),$ npm install moment;

二是app.use(bodyParser.urlencoded({ extended: true })),这可以解决_id undefined 的问题

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

问一下源码从哪里下载?谢谢

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

求源码

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

照着打了N次了,还是不行,express 从4.X 强制安装了3.2.2也不行;

在提交新电影时,显示 movie 未定义,

mac平台,win7平台全试过,一直报错,不知道从何处下手了~

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

helibin

也遇到过,已解决
2015-11-16 回复 有任何疑惑可以回复我~
#2

珍惜小燕子 回复 helibin

在提交新电影时,显示 movie 未定义这个问题你是怎么解决的?
2016-01-20 回复 有任何疑惑可以回复我~

赞!

用的Chrome浏览器,但是也有第三个问题:

在后台录入页上lable和text不在同一行上,列表页没有缩进(很难看);

感觉代码没写错啊,不知道怎么回事

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

Cool4ZBL

发现是自己把 -col-md-2 写成了3...
2014-12-12 回复 有任何疑惑可以回复我~

少年,你在网上看到的源码在哪?分享一下吧

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

风舞

https://www.zybuluo.com/rushui2018/note/372424 欢迎参考以下代码
2016-05-11 回复 有任何疑惑可以回复我~
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解析的问题,但查了半天都不明白错在哪里。还能如何修改?求助啊....查了半天还是没解决


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

whuiscool

我也遇到同样的问题,有解决么?
2014-09-29 回复 有任何疑惑可以回复我~
#2

东亮

var Movie = require('./models/movie')------>var Movie = require('../models/movie')
2014-10-02 回复 有任何疑惑可以回复我~
#3

请叫我一声_大_

我也是卡在这里了,你们的解决了么?
2014-10-07 回复 有任何疑惑可以回复我~
#4

HugoJing

我也是错在: var id = req.body.movie._id ,你解决了吗?
2014-12-11 回复 有任何疑惑可以回复我~
#5

wuka

遇到同意的问题,不知怎么解决!求解
2015-03-10 回复 有任何疑惑可以回复我~
#6

lingzi198853

我也遇到这个问题了,折腾了半天,愣是没解决,这问题你们现在解决了么,求解答啊。不然咋继续啊。
2015-03-12 回复 有任何疑惑可以回复我~
#7

wuka 回复 lingzi198853

已解决 req 和 res 写反了
2015-03-13 回复 有任何疑惑可以回复我~
#8

岷人张

Cannot read property 'movie' of undefined,这个问题怎么破的?求解。
2015-07-05 回复 有任何疑惑可以回复我~
#9

回见

app.post('/admin/movie/new', function(res,req) { 改写成 | | app.post('/admin/movie/new', function(req,res) {
2015-11-04 回复 有任何疑惑可以回复我~
#10

回见

app.post('/admin/movie/new', function(res,req) { 改写成 | | app.post('/admin/movie/new', function(req,res) {
2015-11-04 回复 有任何疑惑可以回复我~
#11

Detonate 回复 回见

表示就是 function(req,res),报错是找不到movie/undefined
2016-03-12 回复 有任何疑惑可以回复我~
#12

风舞 回复 岷人张

你的答案可能是我的这个答案 http://www.imooc.com/qadetail/138602
2016-05-11 回复 有任何疑惑可以回复我~
#13

qq__4412

app.post('/admin/movie/new', function(res,req) 改为: app.post('/admin/movie/new', function(req,res)
2016-05-25 回复 有任何疑惑可以回复我~
#14

qq_快追_03559885 回复 wuka

666
2016-06-27 回复 有任何疑惑可以回复我~
#15

奇兵解码

我也是 TypeError: Cannot read property '_id' of undefined
2016-08-18 回复 有任何疑惑可以回复我~
#16

奇兵解码

TypeError: Cannot read property '_id' of undefined 卡在这 了 app.post('/admin/movie/new', function(res,req) res和req的顺序也换了 但是还是报这个错 求解答
2016-08-18 回复 有任何疑惑可以回复我~
#17

奇兵解码 回复 奇兵解码

这个问题解决的 但是提交的时候 有出现 TypeError: Cannot set property 'updateAt' of undefined
2016-08-18 回复 有任何疑惑可以回复我~
#18

花黑暗里开放

你的参数写错了,req res
2016-09-11 回复 有任何疑惑可以回复我~
#19

郭儿0917

在数据表中的_id不要自己定义,使用自动添加的,就可以了
2016-12-16 回复 有任何疑惑可以回复我~
#20

0b11111110

我也是
2017-03-17 回复 有任何疑惑可以回复我~
#21

慕无忌4252426

连接数据库前加上这句话mongoose.Promise = global.Promise 我和你一样的问题,加上这句话就好了
2017-10-09 回复 有任何疑惑可以回复我~
查看18条回复

app.local.moment = require('moment')

少个s,应该为:

app.locals.moment = require('moment')

6 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
node+mongodb 建站攻略(一期)
  • 参与学习       91860    人
  • 解答问题       889    个

带你完整实现一个从前端到后端的项目,初中级前端开发工程师必学课程

进入课程
意见反馈 帮助中心 APP下载
官方微信