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

Node.js使用Winston记录错误时出现Cannot read properties of undefined报错

解决Winston日志报错:Cannot read properties of undefined (reading 'log')

问题根源

你的errorLogger.js模块没有导出创建好的errorLogger实例,导致在server.js中通过const logger=require('./errorLogger')引入后,logger是一个空对象,自然找不到errorLogger属性,调用log方法就会抛出类型错误。

修复步骤

1. 修正errorLogger.js的导出

在errorLogger.js末尾添加导出语句,把创建好的logger实例暴露出去:

const {createLogger, transports,format} = require('winston')

const errorLogger=createLogger({
    transports:[
        new transports.File({
            filename:"errLogs",
            level:"error",
            format: format.combine(format.timestamp(),format.json())
        })
    ]
})

// 添加导出语句
module.exports = { errorLogger }

2. (可选)简化引用方式

如果不想嵌套访问,也可以直接导出logger实例:

// errorLogger.js修改导出
module.exports = errorLogger

然后在server.js中直接引用:

const errorLogger = require('./errorLogger')
// 调用时直接用 errorLogger.log('error', err)

3. 额外优化建议

  • 变量声明规范:outFile没有用let或const声明,会变成全局变量,建议改为const outFile = "output.jpg"
  • 路径可靠性优化:sharp的输入文件路径"../public/vidgo.jpg"是相对路径,可能因执行环境变化出错,建议用path.join拼接绝对路径:
    sharp(path.join(__dirname, "../public/vidgo.jpg"))
    

修复后的server.js关键代码示例

// ...其他依赖引入
const { errorLogger } = require('./errorLogger') // 解构获取导出的logger

app.get('/down', (req, res) => {
    const outFile = "output.jpg"
    sharp(path.join(__dirname, "../public/vidgo.jpg"))
    .resize()
    .toFile(outFile,(err)=>{
        if(err) {
            console.log(err)
            errorLogger.log('error', err)
        }
        // ...后续下载逻辑
    })
});

内容的提问来源于stack exchange,提问作者No Name

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 05:42:07