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

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

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 回答

You have to explicitly set extended for bodyParser.urlencoded() since the default value is going to change in the next major version of body-parser. Example:

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

   


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

第一个问题Stack Overflow上面有:You have to explicitly set extended for bodyParser.urlencoded() since the default value is going to change in the next major version of body-parser. Example:

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

   


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

Error: connect ECONNREFUSED 127.0.0.1:27017

   at Object.exports._errnoException (util.js:870:11)

   at exports._exceptionWithHostPort (util.js:893:20)

   at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1057:14)


0 回复 有任何疑惑可以回复我~
E:\nodeJS\imooc>node app.js
imooc started on port3000

E:\nodeJS\imooc\node_modules\mongoose\node_modules\mongodb\lib\server.js:242
        process.nextTick(function() { throw err; })
                                      ^

是不是需要安装mongodb?


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

jamx

Error: connect ECONNREFUSED 127.0.0.1:27017 at Object.exports._errnoException (util.js:870:11) at exports._exceptionWithHostPort (util.js:893:20) at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1057:14)
2016-04-16 回复 有任何疑惑可以回复我~

可以把修改时间也加上~

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

db.movies这里的movies是怎么来的?可不可以一个?

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

在app.js中获取不了movie,索性自己改了jade和app.js的代码:

admin.jade:

extends ../layout
block content
.container
.row
form.form-horizontal(method="post", action="/admin/movie/new")
input(type="hidden", name="_id", value="#{movie._id}")
.form-group
label.col-sm-2.control-label(for="inputTitle") 电影名字
.col-sm-10
input#inputTitle.form-control(type="text", name="title", value="#{movie.title}")
.form-group
label.col-sm-2.control-label(for="inputDoctor") 导演
.col-sm-10
input#inputTitle.form-control(type="text", name="doctor", value="#{movie.doctor}")
.form-group
label.col-sm-2.control-label(for="inputCountry") 国家
.col-sm-10
input#inputTitle.form-control(type="text", name="country", value="#{movie.country}")
.form-group
label.col-sm-2.control-label(for="inputPoster") 海报地址
.col-sm-10
input#inputTitle.form-control(type="text", name="poster", value="#{movie.poster}")
.form-group
label.col-sm-2.control-label(for="inputFlash") 片源地址
.col-sm-10
input#inputTitle.form-control(type="text", name="flash", value="#{movie.flash}")
.form-group
label.col-sm-2.control-label(for="inputYear") 上映年代
.col-sm-10
input#inputTitle.form-control(type="text", name="year", value="#{movie.year}")
.form-group
label.col-sm-2.control-label(for="inputSummary") 电影简介
.col-sm-10
input#inputTitle.form-control(type="text", name="summary", value="#{movie.summary}")
.form-group
.col-sm-offset-2.col-sm-10
button.btn.btn-default(type="submit") 录入

app.js:

// admin post movie
app.post('/admin/movie/new', jsonParser, function(req, res) {
var movieBody = req.body
console.log(movieBody)
console.log(movieBody._id)
console.log(movieBody.title)
var id = movieBody._id
var _movie
if (id !== 'undefined') {
Movie.findById(id, function(err, movie) {
if (err) {
console.log(err)
} else {
movie.title = movieBody.title
movie.doctor = movieBody.doctor
movie.country = movieBody.country
movie.poster = movieBody.poster
movie.flash = movieBody.flash
movie.summary = movieBody.summary
movie.year = movieBody.year
movie.save(function(err, movie) {
if (err) {
console.log(err)
} else {
res.redirect('movie' + movie._id)
}
})
}
})
} else {
_movie = new Movie({
doctor: movieBody.doctor,
title: movieBody.title,
country: movieBody.country,
language: movieBody.language,
year: movieBody.year,
poster: movieBody.poster,
summary: movieBody.summary,
flash: movieBody.flash
})
_movie.save(function(err, movie) {
if (err) {
console.log(err)
} else {
console.log(movie._id)
res.redirect('movie' + movie._id)
}
})
}
})


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

http://img1.sycdn.imooc.com//55cc546c0001e7f606690438.jpg这是报的什么错啊?

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

还需要加一句:在项目根目录下安装body-parser: npm install body-parser 

代码加上:

var bodyParser = require('body-parser')

app.use(bodyParser.urlencoded({ extended: false }))

app.use(bodyParser.json())


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

关于body-parser的问题:

尝试楼主的办法,没解决问题;

安装body-parser模块`npm install body-parser`后命令行提示的页面解决方

// parse urlencoded request bodies into req.body
var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded());

结果服务器启动错误,提示:

$ node app.js
module.js:338
    throw err;
          ^
Error: Cannot find module 'mime-db'
    at Function.Module._resolveFilename (module.js:336:15)
    at Function.Module._load (module.js:278:25)
    at Module.require (module.js:365:17)
    at require (module.js:384:17)
    at Object.<anonymous> (/Users/freeyiyi19931/node-mongodb-in-action/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/index.js:2:10)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Module.require (module.js:365:17)
    at require (module.js:384:17)

注释掉调用的句子服务仍然可以启动,但是mei办法用res.body得到movie对象,请问楼主怎么解决啊

0 回复 有任何疑惑可以回复我~
首页上一页123下一页尾页

举报

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

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

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