Node.js 6.11模块导出传参后调用函数报错排查
解决Node.js模块调用时的"Cannot read property 'printMessage' of undefined"错误
嘿,这个问题我太熟悉了!咱们来拆解一下哪里出了问题:
错误根源
你在lib.js里导出的libService函数,虽然接收了msg参数并赋值给了msgToPring(顺便提一句,这里拼写错了,应该是msgToPrint),但这个函数没有返回任何值!
当你在app.js里执行myService = require('./lib.js')("Hello World")时,其实是先加载lib.js,然后立即调用导出的libService函数。因为libService没有返回值,所以myService会被赋值为undefined,这时候调用myService.printMessage()自然就会报错啦。
修正方案
我们只需要让libService函数返回一个包含printMessage方法的对象就行,闭包会帮我们保留住msg参数的值。这里给你两种常见的写法:
写法一:直接返回方法对象
// lib.js 修正版 module.exports = function libService(msg) { return { printMessage: function() { console.log(msg); } }; }
写法二:保留变量的写法(修正拼写错误)
// lib.js 另一种修正方式 module.exports = function libService(msg) { var msgToPrint = msg; // 修正拼写错误 return { printMessage: function() { console.log(msgToPrint); } }; }
现在再运行app.js,就能正常打印"Hello World"了!
内容的提问来源于stack exchange,提问作者John Glabb
相关产品推荐
相关产品推荐

