我使用的是[官方弃用的]请求库[1],它使用表单数据库[2]来发布文件数据.由于各种原因,目前不可能切换到活动的和维护的http请求库.

从NodeJS v14->v16升级后,我发现将文件数据发送到only台DotNet服务器时始终失败.我在我们拥有的两个端点以及其他以类似方式发出请求的已弃用库(如[也已弃用]azure-storage[3])上观察到了这一点,并且可以确认在升级过程中没有发生变化.

该错误表现为超时,就好像服务器接收了客户端发送的所有内容,但认为还有更多要接收的内容.

我仍然在努力找出到底发生了什么变化,但我很好奇是否有其他人遇到过类似类型的问题,以及在提出避免该问题的请求时是否有任何可以作为创可贴的解决方案.

[1]https://www.npmjs.com/package/request

[2]https://www.npmjs.com/package/form-data

[3]https://www.npmjs.com/package/azure-storage

推荐答案

经过多次调试后,该问题似乎与通过请求-&>形式-数据->;组合流->;延迟流时文件系统流的状态损坏有关.也就是说,100%与DotNet无关.这很可能出现在Node v15 Commit[1]中,它对文件系统流的状态机产生了微妙的影响,并且只是因为CombinedStream和DelayedStream使用神秘的魔术来try 和实现其期望的效果而显现出来的.

我目前正在做的是在发送请求之前等待发出文件系统createReadStream open事件,因为这是我看到的事件,如果它是在Delay-Stream试图暂停/冻结它并代表它传播事件之后发出的,那么它就会引起问题.

更好的做法是完全远离请求/表单数据.

[1]https://github.com/nodejs/node/commit/54b36e401d

Node.js相关问答推荐

在Node.js下使用PostgreSQL客户端聚合PostgreSQL中的用户定义类型

Node.js PNG缓冲区获取未知图像格式错误

我的Node.js应用程序没有将Mongoose方法findByIdAndDelete作为函数进行检测

如何在Sequelize with Postgres中将m:n关联表ID从整数迁移到UUID?

Rails 7导入npm yaml包时出现404错误

动态设置元数据,无需重复请求 NextJS 13

在 Nest 项目上运行 Jest 测试时,我的文件无法找到一个在测试之外没有任何问题的模块

Prisma,只有一个用户的行可以有真值,@@unique(userId, isActive)

npm 在 Windows 终端中不工作

如何使用 node.js 将两个或多个 API 请求组合成一个端点并表达

使用 NPM 三个 mocha+typescript 进行测试

将环境变量从 GitHub 操作传递到 json

Express.js - 监听请求中止

无法通过谷歌Electron 表格 api( node js)中的服务帐户访问写入

AWS EC2 npm install 突然很慢

tsc:当我上传 React+next js 和 node 项目时,在 heroku 找不到

使用服务帐户将 Firebase 应用程序部署到 Heroku(使用 dotenv 的环境变量)

如何以编程方式检测nodejs中的调试模式?

具有多个条件的mongoose 查找

对不同对象中的函数使用相同的键时,V8 中的函数调用缓慢