【发布时间】:2015-03-28 23:48:30
【问题描述】:
这里有一个我正在处理的节点模块。以前它只是许多嵌套函数。我想改进代码,所以把所有的函数都写出来,然后在底部按顺序调用它们。发生了一件奇怪的事情,我没有得到TypeError: Cannot read property 'url' of undefined。
var User = require( '../models/userModel' ),
...
exports.add = function ( req, res ) {
function getVideoId ( req, callback ) {
videoId = URL.parse( req.query.url ).query.slice(-11)
callback( videoId )
}
...
getVideoId( req, function() {
...
...
...
...
...
return res.json( "Done." )
})
})
})
})
})
})
}
【问题讨论】:
-
也许你应该看看 promises 而不是回调地狱?
-
我和@adeneo 一起讨论这个问题。如果这是异步代码,您真的想使用Promises。您在这里拥有的是那些“末日金字塔”反模式之一。有关开箱即用的 ES6 标准的更多信息,请通过 iojs 获得,可通过永远有用的 Mozilla MDN 获得。
-
@adeneo 是的,我已经开始这样做了。昨晚起床编写此代码的第三个版本,但没有按照描述的那样工作。一次一件事。
-
这里需要做一些基本的调试。当
getVideoId调用时,req填充了什么?还值得注意的是,在函数中声明然后立即调用函数是一种有点可疑的优化。您可能希望首先声明您的函数,在其外部,然后在您要导出的最终函数中使用它们。 -
@tadman 回复:在导出之外声明函数;是的,我这样做了,但将它们移入以尝试解决此范围问题。当我执行
console.log( req.query )时,我看到一个带有url: 'my-url的json 对象。
标签: javascript node.js scope request