关于JS 作用域的问题
发布于 9 年前 作者 helloedmund 3721 次浏览 最后一次编辑是 8 年前 来自 问答

app.get(’/movie/:id’, function (req, res) { var id = req.params.id console.log(id + “b”) Movie.findById(id, function(err, movie) { console.log(movie) res.render(‘detail’, { title: ‘imooc’ + movie.title, movie: movie }) }) }) 这段代码报错: TypeError: cannot read property ‘title’ of undefined. 然而我render上的那个console.log是能正常输出这个movie对象的

请问render怎么能读取到外面的movie对象? QQ截图20151021090323.png

9 回复

赖好也拍个版呀,render里面读取movie对象没问题,若读取不到就是你得movie对象有问题

@blackjack 但是 我能正常输出movie对象啊…但是就是读不出 title属性

你的console.log(movie)输出的是undefined吧

@wangnan0610 我把所有用于查看输出信息的console删了,只留下console.log(movie),显式如下: QQ截图20151021104824.png 也就是一个console 出现了两个答案。但是我的浏览器是可以正常输出数据的: QQ截图20151021104947.png 代码: QQ截图20151021105115.png

控制台不是输出了一个undefined么,看起来就是movie是undefined,所以movie.title会报错。Movie.findById是异步的函数吧?res.render写在这个回调里可以的么?

render肯定要在回调里面取到movie后,先判断是否有movie在render

你在console.log(movie)前后用这样的东西console.log('-----')辅助一下排查 应该是你findById没有查询到的原因

你查询了两个movie,一个:id=q,另一个可能是空。 验证方法:
  1. 打开浏览器控制台,查看前台发送给后台的网络请求
  2. 将console.log(id+‘b’)放到 findById的回掉函数里面
回到顶部