You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

首次使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 11:15:05