Node js http服务器请求正文作为流可读

2024-01-10

我正在使用 node.js 编写一个 http 服务器,但无法将请求正文隔离为可读的流。这是我的代码的基本示例:

var http = require('http')
  , fs = require('fs');

http.createServer(function(req, res) {
  if ( req.method.toLowerCase() == 'post') {
    req.pipe(fs.createWriteStream('out.txt'));
    req.on('end', function() {
      res.writeHead(200, {'content-type': 'text/plain'})
      res.write('Upload Complete!\n');
      res.end();
    });
  }
}).listen(8182);
console.log('listening on port 8182');

根据节点的文档 http://nodejs.org/api/http.html#http_http_incomingmessage请求参数是 http.IncomingObject 的实例,它实现了节点的可读流接口。正如我上面所做的那样,仅使用 Stream.pipe() 的问题是可读流包含请求标头的纯文本以及请求正文。有没有办法只将请求正文隔离为可读流?

我知道有一些用于文件上传的框架,例如强大的框架。我的最终目标不是创建上传服务器,而是充当代理并将请求正文流式传输到另一个 Web 服务。

提前致谢。

编辑>> 使用busboy的“内容类型:多部分/表单数据”的工作服务器

var http = require('http')
  , fs = require('fs')
  , Busboy = require('busboy');

http.createServer(function(req, res) {
  if ( req.method.toLowerCase() == 'post') {
    var busboy = new Busboy({headers: req.headers});
    busboy.on('file', function(fieldname, file, filename, encoding, mimetype) {
      file.pipe(fs.createWriteStream('out.txt'));
    });
    req.pipe(busboy);
    req.on('end', function() {
      res.writeHead(200, 'Content-type: text/plain');
      res.write('Upload Complete!\n');
      res.end();
    });
  }
}).listen(8182);
console.log('listening on port 8182');

检查你的req.headers['content-type']。如果它是multipart/form-data那么你可以使用像这样的模块busboy https://github.com/mscdex/busboy为您解析请求并为您提供文件部分的可读流(以及非文件部分的纯字符串(如果存在))。

如果内容类型是其他类型multipart/*输入,然后你可以使用dicer https://github.com/mscdex/dicer,这是 Busboy 用于解析多部分的底层模块。

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

Node js http服务器请求正文作为流可读 的相关文章

  • 在 AWS Lambda 中共享代码

    在 AWS Lambda 函数之间共享代码的首选方式是什么 我有这样的结构 functions a 节点模块 index js 包 json b 节点模块 index js 包 json c 节点模块 index js 包 json 这让每
  • 在 NodeJS 中运行 Conda 命令

    我无法使用以下命令运行 C onda 命令exec与我的 NodeJS 应用程序 var conda path miniconda3 bin conda var cmd conda path init bash conda path act
  • 设置ejs在express中查看文件夹的查找路径

    I have app js in Express 服务器文件夹 aap js 的完整位置是I WEB Development Node Express server 我做了views该位置的文件夹I WEB Development Node
  • 角度2多次错误TS2300:重复的标识符

    系统配置 ubuntu 14 04 节点 v gt v5 6 0 npm v gt 3 7 1 打字最新版本 不知道如何获取版本详细信息 第一次使用 angular2 时 我的文件夹样本 服务器结构如下 server js server t
  • 在 Node.js 中以事务方式写入文件

    我有一个 Node js 应用程序 它将一些配置数据存储在文件中 如果更改某些设置 配置文件将写入磁盘 目前 我正在使用一个简单的fs writeFile 现在我的问题是 当 Node js 在写入文件时崩溃时会发生什么 磁盘上是否有可能存
  • 装饰器中间件模式的 Typescript 类型

    我正在考虑节点中间件 在各种框架中 通常 中间件会向请求或响应对象添加一个属性 然后该属性可供在其之后注册的任何中间件使用 此模型的一个问题是您无法进行有效的打字 为了进行演示 这里有一个此类框架的高度简化的模型 在这种情况下 一切都是同步
  • 如何在PHP中完成http响应并进行进一步处理?

    就我而言 我需要向客户端回显一个标志并发送一封电子邮件 现在客户端需要等待电子邮件发送 但我想把这两个步骤分开 该怎么做呢 你可以看一下异步运行 PHP 任务 https stackoverflow com questions 858883
  • 将实时流音频从 NodeJS 服务器获取到客户端

    我需要从 1 个客户端到服务器到多个侦听器客户端的实时实时音频流 目前 我正在从客户端进行录音 并通过 socket io 将音频流式传输到服务器 服务器接收此数据 并且必须将音频流式传输 也通过 socket io 到想要收听此流的客户端
  • 如何使用 Spring Boot 传输音频

    我想让用户能够播放声音 我的实现在 Firefox 上运行良好 在 Safari 上 不播放声音 我验证了音频控制可以在 Safari 中与其他网站一起使用 所以 我认为我必须更改控制器中的某些内容 控制器 RequestMapping v
  • NodeJS - 将相对路径转换为绝对路径

    In my 文件系统我的工作目录在这里 C temp a b c d 在 b bb 下有文件 tmp txt C temp a b bb tmp txt 如果我想从工作目录转到该文件 我将使用以下路径 bb tmp txt 如果该文件不存在
  • 调用 `app.close()` 时,Nest 找不到 Sequelize 元素

    我们有一个运行 Nest 8 0 8 的 Web 服务器 使用给定的模块设置 Module imports ConfigModule forRoot isGlobal true cache true validate load config
  • Firebase 身份验证和实时应用程序数据库如何保护自身安全?

    从一般开发的角度来看 我很好奇如何保护在线资源的访问 我们使用以下 Firebase 配置参数初始化 Web 应用程序 apikey authdomain projectid databaseurl messagesenderid 服务器如
  • 如何告诉node.js mysql没有在默认端口上运行?

    我遇到了与此人类似的问题 连接 ECONNREFUSED 节点 js sql https stackoverflow com questions 8825342 connect econnrefused node js sql 我正在尝试将
  • HTTP 错误 415 我做错了什么?

    我正在发送 SOAP POST 但收到 HTTPError HTTP 错误 415 不支持的媒体类型 response urllib2 urlopen req data
  • 找不到模块“node-sass”时出现错误

    配置 macOS High Sierra 版本 10 13 2 节点 v8 1 2 npm 5 0 3 当我在 angularjs 项目中运行 npm start 时 出现以下错误 ERROR in Cannot find module n
  • Loopback ValidationError:“Role”实例无效。详细信息:`name`已经存在(值:“admin”)

    我是环回新手 但是我按照以下步骤安装和搭建我的文件夹 环回服务器 在 server boot 内创建了一个文件 script js 并包含以下代码 module exports function app var MongoDB app da
  • 从套接字读取 C HTTP

    我想知道如何判断是否已从套接字接收到所有数据 这是一个简单的网络代理 现在我正在处理请求部分 所以发送的内容应该以 r n r n 结尾 我不知道请求会持续多久 我在这里读过一些帖子 说我应该检查读取函数是否返回 0 但其他人说0只在客户端
  • 如何在 Next.js 中正确使用 Mongoose 模型?

    我正在使用 TypeScript 和 MongoDB Mongoose 构建 Next js 应用程序 我在使用 Mongoose 模型时开始遇到错误 这导致它们在每次使用模型时都尝试覆盖模型 导致模型覆盖错误的代码 import mong
  • 设置环境变量供节点检索

    我正在尝试遵循教程 它说 有几种加载凭据的方法 从环境变量加载 从磁盘上的 JSON 文件加载 键需要如下所示 USER ID USER KEY 这意味着如果您正确设置环境变量 您 根本不需要管理应用程序中的凭据 根据一些谷歌搜索 我似乎需
  • axios 在发送数据时给我将循环结构转换为 json 错误

    我的代码如下所示 axios post https api sandbox xyz com v1 order new JSON stringify request v1 order new nonce 123462 client order

随机推荐

  • 使预处理器跟踪定义的来源

    在一大堆复杂的源代码中 不是这里发明的 是由 Elbonian 代码奴隶拼凑在一起的 可能会出现这样的情况 几位代码在其路径中拥有一些公共头文件的本地副本 由于构建和使用的层数较多保护宏 https gcc gnu org onlinedo
  • PHP。为什么日期对象的月份差异在 12 个月后重置为 0?

    今天是 2015 年 7 月 8 日 当我运行以下命令时它返回0 如果不返回12 日期是12个月前 同样如果 date 2014 06 03 它返回1 难道不是吗13 过去 12 个月内的所有日期均已正确计算 date 2014 07 03
  • wwwroot 之外的 Elmah logPath

    我们正在尝试部署我们的项目 但我们无法让 elmah 在 wwwroot 之外创建 xml 日志 它当前正在记录到 inetpub site wwwroot App Data 因为这是唯一可行的路径 我们希望将其记录到我们的 inetpub
  • Java:使用引用游标作为 OUT 调用存储过程时结果集为空

    我试图从 Java 调用存储过程 但返回的结果始终是false 实际上 它必须返回 100 条记录 连接建立良好 我有一个存储过程 PROCEDURE get records grp1 IN a name TYPE DEFAULT NULL
  • 使用 PHP 将带有换行符的字符串分解为 HTML 段落

    我从 MySQL 数据库获取文本 该文本被分成行 段落 它存储在变量中 post data content 如何使其打印时带有换行符 我当前使用的代码 post data content explode n post data conten
  • 退出 Putty 后如何保持 Spring Boot 应用程序处于活动状态

    我正在通过命令使用 putty 在我的服务器上运行我的 spring boot 应用程序 mvn spring boot run 仅当我打开 ssh 会话时才运行 断开会话后是否可以使应用程序保持活动状态 或者我是否必须制作可执行的 war
  • g++ 编译另一个目录中存在的源文件

    我正在尝试使用 makefile 为我正在开发的 C 插件设置构建过程 我很好奇是否有任何方法可以让 g 编译source在另一个目录中找到的文件 我这样做的动机是避免为每个源文件指定相对路径 正如我在下面解释的那样 我的项目目录结构如下
  • wpf 工具提示 - 设置跨应用程序的持续时间

    我可以在单个控制工具提示上设置属性 例如持续时间 但我需要的是为整个应用程序中的所有工具提示设置更长的持续时间 所有窗口 所有用户控件等 有没有任何干净的方法来实现它 谢谢 您可以覆盖元数据ToolTipService ShowDurati
  • 为什么我不能将 python 的 print 分配给变量?

    我正在学习编程 并使用 Python 开始 在那里 我发现我可以做这样的事情 gt gt gt gt def myFunction return 1 gt gt gt gt test myFunction gt gt gt gt test
  • 通过 Python 在 Excel 中创建切片器对象

    我正在尝试使用 python 中的 XLwings 包在 Excel 工作表中重新创建一些 tableau 功能 具体来说 我编写了一个脚本 用于处理来自 SQl Server 的数据并执行一些聚合 统计函数 其输出是 pandas 数据帧
  • 将字符串转换为自定义日期格式 - C# razor

    我有一个存储事件的 mySQL 数据库 并且这些事件都有日期 我正在提取事件日期 它们以字符串形式在 HTML 中输出 ul IEntity latestEvents ViewBag LatestEvents foreach IEntity
  • Python Selenium 单击可见元素

    使用 Python Selenium 我试图检查一个元素是否可见 然后单击它 如果是 Check to see if element is visible myelement driver find element by xpath a i
  • PowerShell 自定义提供程序RemoveItem

    我正在实施一个自定义电源外壳 http en wikipedia org wiki Windows PowerShell提供者 我现在正在研究remove item cmdlet 实现 RemoveItem 方法具有以下签名 protect
  • Angular Abstract 控件删除错误

    我想要一种从表单控件中删除特定错误而不是清除所有错误的方法 control setError firstError true 并删除该特定错误 例如 control removeError firstError and not contro
  • Javascript 在 dom 内移动时失去与 flash 的通信

    Actionscript 内的代码 var methodName4 String startupload var instance4 Object null var method4 Function startupload var wasS
  • Facebook 图形 API 不会返回用户的所有帖子

    我正在尝试通过 Facebook 图形 API 获取所有用户帖子 但永远无法得到全部 当我通过路径 me posts 参数限制 5000 尝试它时 我得到了用户写的所有帖子 就像我想要的那样 但不是在特定日期之前 意思是 这样我就不会在特定
  • iPhone 上令人困惑的内存分配错误

    你好 我正在开发一个 iPhone 应用程序 它提供图像和文本信息 每个文本中都有一个图像 可以单击和缩放 用 UIImageView 显示 NSString imgName imgPath substringToIndex imgPath
  • javafx FXML Canvas 绘制后为空

    我正在使用 Intellij IDEA 进行 javafx FXML 开发 我使用以下代码简单地绘制了一个矩形 然而 它从未出现过 主程序 java public class Main extends Application Overrid
  • 当结果依赖于前面的单元格时,如何将函数应用于数组的每个元素

    我有一个数组 a np array 2 3 5 8 3 5 计算每个结果元素所在数组的最有效 向量化 方法是什么 伪代码 result 0 a 0 for i gt 0 result i result i 1 a i result i 1
  • Node js http服务器请求正文作为流可读

    我正在使用 node js 编写一个 http 服务器 但无法将请求正文隔离为可读的流 这是我的代码的基本示例 var http require http fs require fs http createServer function r