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
相关产品推荐
相关产品推荐

