首次使用Node.js模块开发logger程序运行报TypeError错误求助
错误原因详解
- 模块导出逻辑错误
Node.js中module.exports为单值导出,多次赋值会直接覆盖之前的内容。你的代码中module.exports = log()、module.exports = format()的写法存在两个问题:一是加了()会直接执行函数,而非导出函数本身;二是两次赋值后最终导出的是format()执行后的字符串结果,不是包含log、format方法的对象。因此你在测试文件中require拿到的logger变量本质是字符串,调用logger.log自然会报「不是函数」的错误。 - 日期处理逻辑错误
直接调用Date()返回的是字符串类型的时间文本,不是Date实例对象,本身不存在getFullYear、getMinute属性,访问会返回undefined。就算是正确生成的Date实例,getFullYear、getMinute也是方法,需要加()调用才能拿到对应数值,不加括号会返回函数本身而非结果。 - 日期方法名拼写错误
Date实例获取分钟的正确方法名为getMinutes(),你代码中写的getMinute本身是不存在的属性,访问也会返回undefined。 - 函数调用参数缺失
你导出时执行log()没有传入message参数,所以函数内部message为undefined,因此运行时第一行输出会出现logger.js (undefined-undefined): undefined的内容。
修正后的代码
logger.js
let log = function(message){ console.log(format(message)); } let format = function(message){ // 用new生成Date实例,方法调用加括号,修正分钟方法名 let dt = new Date() let msg = 'logger.js ('+dt.getFullYear()+'-'+dt.getMinutes()+'): '+message; return msg; } // 导出包含两个方法的对象,不要加()执行函数 module.exports = { log: log, format: format }
loggertest.js
无需修改,保持原有代码即可:
let logger = require('./logger'); logger.log('Info: The new logger works perfectly!'); console.log(logger.format('Info: The new logger works perfectly!'));
运行效果
修正后运行node loggertest会输出类似如下内容:
logger.js (2024-28): Info: The new logger works perfectly! logger.js (2024-28): Info: The new logger works perfectly!
内容的提问来源于stack exchange,提问作者Jusauria
相关产品推荐
相关产品推荐

