veminhe 2025-03-27 10:28 采纳率: 15.4%
浏览 23

Nodejs遇到问题TypeError: source.on is not a function

问题遇到的现象和发生背景

现象:Nodejs遇到问题TypeError: source.on is not a function
背景:通过前端上传文件,调用Nodejs写的上传文件接口(该接口会先调用第三方写的接口获取到文件然后解密数据然后传到bos上,再去bos上获取这个文件的数据),获取到数据填充到页面表格里。

操作环境、软件版本等信息

操作系统:window和linux都会遇到
软件环境:v20.10.0的Nodejs

我想要达到的结果

我希望能解决这个问题。

问题具体描述请见:https://blog.csdn.net/heming20122012/article/details/146549300?spm=1011.2415.3001.5331

  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2025-03-27 10:28
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    Nodejs遇到问题TypeError: source.on is not a function

    问题现象和背景

    现象:Nodejs遇到问题TypeError: source.on is not a function

    背景:通过前端上传文件,调用Nodejs写的上传文件接口(该接口会先调用 multer middleware 处理文件上传)

    解决方案

    这个错误通常是因为 source 对象没有 on 方法,这可能是因为 source 对象是一个简单的对象,而不是一个 EventEmitter 对象。

    在你的情况下,可能是 multer middleware 处理文件上传时,返回的结果不是一个 EventEmitter 对象,而是一个简单的对象。

    你可以尝试检查 source 对象的类型,使用 console.log 打印出 source 对象的结构,来确定是什么对象。

    如果 source 对象是一个简单的对象,你可以尝试使用 events 模块来模拟一个 EventEmitter 对象,例如:

    const events = require('events');
    const source = new events.EventEmitter();
    

    如果你确定 source 对象是一个 EventEmitter 对象,但是 on 方法仍然不存在,可以尝试检查 source 对象的 prototype 是否被修改了,使用 Object.getPrototypeOf 方法来检查:

    console.log(Object.getPrototypeOf(source));
    

    如果 source 对象的 prototype 被修改了,可以尝试使用 Object.setPrototypeOf 方法来恢复原来的 prototype。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月27日