Node.js未执行导入的函数,输出结果与预期不符的技术问题
解决Node.js导入模块后未执行函数的问题
嘿,这个问题其实很容易搞定——你现在只是导入了包含main函数的对象,但没有调用这个函数,所以控制台输出的是函数本身,而不是它返回的'message'字符串。
方法一:在导入后调用函数
你可以修改index.js,在导入后直接调用main函数:
// 方式1:直接调用导出对象里的main函数 const msg = require('../server/email/sendMail').main(); console.log(msg); // 现在会输出 'message'
或者先把整个模块导入,再调用函数,可读性更好:
// 方式2:先导入模块对象,再调用函数 const mailUtils = require('../server/email/sendMail'); const msg = mailUtils.main(); console.log(msg); // 输出 'message'
方法二:修改模块导出为函数执行结果
如果你希望导入模块时直接拿到返回的字符串,而不是函数,可以修改sendMail.js的导出逻辑,直接执行函数并导出结果:
// sendMail.js function main() { return 'message' } // 直接执行main函数,导出它的返回值 module.exports = main();
然后index.js保持原来的写法就可以正常输出字符串了:
const msg = require('../server/email/sendMail'); console.log(msg); // 输出 'message'
为什么会出现这个问题?
Node.js的require方法会加载并返回模块中module.exports指向的内容。你之前的sendMail.js导出的是一个包含main函数的对象{ main: [Function: main] },所以index.js里的msg就是这个对象,只有调用main()才能触发函数执行,拿到它返回的字符串。
内容的提问来源于stack exchange,提问作者Peter Boomsma
相关产品推荐
相关产品推荐

