使用 request 和 multiparty 进行 multipart/form-data 时,出现错误:uncaughtException:source.on 不是函数

2024-01-07

我正在尝试将数据从我的节点应用程序发送到第 3 方 HTTP 端点。

我正在使用多方模块解析来自客户端的请求对象上的数据,并通过请求模块发送数据。我收到错误

错误:uncaughtException:source.on 不是函数

var request = require('request');
const multiparty = require('multiparty');

function addAttachment(req, res) {
  let form = new multiparty.Form();
  let parsedFile = {};
  const formData = {};
  form.parse(req, function(err, fields, files){
    Object.keys(fields).forEach(function(name) {
      formData[name] = fields[name][0];
    });

    Object.keys(files).forEach(function(name) {
      logger.debug(name);
      parsedFile[name] = files[name][0];
    });
    formData.uploadFile = parsedFile.uploadFile;
    logger.debug('formData ', formData);

    reqOptions.url = imageURL;
    reqOptions.formData = formData;

    logger.debug('REQ_OPTIONS ', reqOptions);

    request.post(reqOptions, function (err, response, body) {
      if (err) {
        logger.warn(req, ' Error sending attachment', err);
        res.status(400);
        res.json({ "msg": "Error sending attachment" });
      } else {
        res.status(201);
        logger.debug('BODY ', body);
        res.send(body);
      }
    });
  });
}

The reqOptionsobj 包含 headers、url、auth obj,然后我们向其中添加表单数据。

当我记录表单数据时,它看起来格式正确

{
"meta": {
    "prop1": "xxxxxx",
    "prop2": "xxxxxxxxxxxxx",
    "uploadFile": {
        "fieldName": "uploadFile",
        "originalFilename": "test.PNG",
        "path": "/tmp/W1IppPiK04JpkPrnZWEhzkmV.PNG",
        "headers": {
            "content-disposition": "form-data; name=\"uploadFile\"; filename=\"test.PNG\"",
            "content-type": "image/png"
        },
        "size": 42786
    }
}

}


这个错误可能是错误消息如何完全误导的最好例子之一。所以。对这个问题进行 RCA 非常令人沮丧:

ERROR: uncaught Exception: source.on is not a function

实际上这里没有任何功能。就我而言,我花了几个小时摸不着头脑,最后才发现它是另一个 JSON 下的 JSON,这导致了这个错误:

  let subJson = 
  {
      field1: "value1",
      field2: "value2"
  }

  let myJson = 
  {
      field1: "value1",
      field2: "value2",
      field3: subJson
  }

  createFormData(myJson);

就是这个!你打电话时createFormData with myJson作为参数,你会看到异常source.on is not a function!我们一直在想这个功能在哪里?

解决办法是JSON.stringify

   field3: JSON.stringify(subJson)

将解决这个问题。

JavaScript!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 request 和 multiparty 进行 multipart/form-data 时,出现错误:uncaughtException:source.on 不是函数 的相关文章

  • 错误:键 $conditionalHandlers 不得以 '$' mongodb 开头

    我对 mongodb 特别是 Node js 的 mongoose 包有疑问 我有以下架构 var Schema mongoose Schema var location new Schema nomville type String re
  • Dialogflow 简单的授权方法

    是否存在将 Dialogflow 代理连接到的简单方法node js代码 当我将此代码与从 Dialogflow 代理的设置页面获取的正确项目 ID 一起使用时 出现以下错误 错误 获取应用程序默认凭据时出现意外错误 无法加载默认凭据 浏览
  • require('babel/register') 不起作用

    我在客户端上有一个用 ES6 编写的同构应用程序Babel 转译器 http babeljs io 我希望我的 Express 服务器具有与客户端代码相同的 ES6 语法 很遗憾require babel register 不起作用 服务器
  • 喜欢和不喜欢用户对产品的评论

    用户架构 var UserSchema new Schema review likes type String review dislikes type String 审查架构 var ReviewSchema new Schema pro
  • Strongloop 环回 如何使用路由进行静态服务?

    我想做类似的事情 server js app use client loopback static dirname client using middleware json 但该示例仅适用于根 files loopback static p
  • 如何使 fs.readFile 异步等待?

    我这里有这个 NodeJS 代码 它读取文件夹并处理文件 该代码有效 但它仍然是先打印所有文件名 然后只读取文件 如何获取一个文件 然后先读取该文件的内容 而不是先获取所有文件 async function readingDirectory
  • 电子邮件模板中的剪贴板功能

    我想在电子邮件模板中发送优惠券代码 一个小按钮 用于复制剪贴板上输入元素的内容 通过电子邮件模板 我的意思是我想发送一封电子邮件 其中包含优惠券代码 并且电子邮件模板中会有一个按钮 允许我将其复制到剪贴板 这可以做到吗 任何帮助将不胜感激
  • 使用 Node.js 访问用 C++ 编写的 SDK

    我有一个用 C 语言编写的 SDK 可以与我的扫描仪设备进行通信 我需要开发一个可以访问扫描仪设备的电子应用程序 我知道有很多库可用于扫描仪 但我想使用这个 SDK 因为它允许我访问设备的完整功能 而且它是由设备制造商提供的 那么 有没有什
  • express-session:滚动会话过期配置

    所以我在 mongo 商店中使用快速会话 如下所示 app use session secret some secret here saveUninitialized false resave false store new MongoSt
  • MongoDB 中两个集合之间的 Diff()

    我做过研究 如果这是一个重复的问题 我很抱歉 但其他问题的解决方案并不适合我 因此 我提出了一个新问题 使用 Javascript 比较两个集合的最佳方法是什么 我有数千个这样的 Mongo 文档格式的标头 url google com h
  • “brew升级节点”后“node -v”显示错误版本

    我升级了 Node js 版本brew upgrade node其中安装了v5 3 0 但是当我得到节点的版本时node v它显示 v0 10 29 I tried brew link overwrite node但这没有用 Brew 已链
  • 有没有办法在 TypeScript 2+ 中全局添加类型定义?

    我有一堆简单的 ts files 不是项目 即独立的 ts 脚本 他们使用一些 Node js 功能 TypeScript 和节点类型定义通过安装 npm install g typescript npm install g types n
  • 运行“npm”返回“错误:找不到模块‘继承’”

    module js 340 throw err Error Cannot find module inherits at Function Module resolveFilename module js 338 15 at Functio
  • 使用 dnode 从服务器向客户端发送消息

    几个月前 我发现了 nowjs 和 dnode 并最终使用了 nowjs 并且https github com Flotype nowclient https github com Flotype nowclient 用于客户端 服务器双向
  • NodeJS os 模块无法使用 userInfo()

    https nodejs org api os html os os userinfo options https nodejs org api os html os os userinfo options 节点版本 v4 2 6 NPM版
  • 类验证器 (Node.js) 在自定义验证中获取另一个属性值

    目前 我有一个非常简单的类验证器文件 其中包含 Nest js 中的 ValidationPipe 如下所示 import IsDateString IsEmail IsOptional IsString Length Max from c
  • 无法在 AWS Lambda 自定义授权方中验证 Twilio 请求

    我使用 NodeJS 构建了一个自定义授权者 lambda 函数 并将其配置为授权 AWS 中的另一个 lambda 函数 这个其他函数是从 HTTP 端点触发的 并且具有我在 Twilio Messaging Service 中配置为 w
  • Eclipse 中的 node.js - 大多数人使用哪个插件?

    我最感兴趣的是服务器端 Web 开发 尽管能够在 Chrome 中重新部署一些部分会很好 我目前正在跑步Eclipse Indigo在 Ubuntu 上主要开发 Java Scala 程序并使用 git 到目前为止我遇到过http code
  • 在 AWS Lambda 中共享代码

    在 AWS Lambda 函数之间共享代码的首选方式是什么 我有这样的结构 functions a 节点模块 index js 包 json b 节点模块 index js 包 json c 节点模块 index js 包 json 这让每
  • 不要在查询字符串 stringify 中对 url 进行编码

    有什么选择吗qs stringify那将not对网址进行编码 node gt var qs require querystring undefined gt qs stringify url http domain com url http

随机推荐