sails.js中的部分POSTED数据(不时)

我有一个生产服务器(Ubuntu的),用户填写和发送表单(多部分),创build或更新logging。 现在有时当我尝试使用req.allParams()我得到一个对象与不完整的数据。

比方说,这是我平时得到的:

 data: { id: '58155', name: 'The Gallery Name', email: 'gallery@gmail.com', phone: '(+54911)68460005', url: 'www.theurl.com', workingHours: 'Tuesday - Friday 3 - 8 pm', artists: ['58350', '15503', '58346', '58347', '58348', '58349'], locations: [{ country: 1, state: null, city: 45, zip: '33175', address: '' } ], showOnGuide: true, preferredLanguage: 'en', events: [1, 4, 5] } }; 

但不时我得到:

  data: { id: '58155', name: 'The Gallery Name', email: 'gallery@gmail.com', phone: '(+54911)68460005', url: 'www.theurl.com', workingHours: 'Tuesday - Friday 3 - 8 pm', artists: ['58350', '15503', '58346', '58347', '58348', '58349'] } }; 

我已经检查了表单,它们是正确的,所以唯一明显的是只有最后一个键(表单域)缺失,所以我假设它可能与某些POST超时有关?

要清楚的是,在我完成任何格式化之前,这就是我如何获取数据,甚至将日志放入sails/node_modules/skipper/index.js

 /// .. some code MultipartBodyParser(req, res, function(err) { if (err) return next(err); console.log(req.body); /// ... some code } 

部分信息不时显示。 我没有看到我的本地机器上有这种行为,但正如我所说的,这种情况非常罕见,每30次中有1次,但是客户端发送的数据丢失仍然非常惨重。

这似乎是帆,快车或船长的问题。

我一直在试图debugging这几天,这是最接近我得到的,因为一开始我什么都不知道为什么或什么时候发生,现在我知道表单发送正确,但帆要么收到它不完整或parsing不正确。

有没有人遇到类似的问题? 任何导致解决这个问题的想法都是非常受欢迎的。

版本:

  • 节点0.12
  • 帆0.11.3

注意:这种情况发生在有或没有上传文件的情况下

编辑:通过使用networkingpipe理器(NetBalancer)我已经尝试尽可能降低上传速度1字节/秒,但我没有得到奇怪的行为,所以它似乎并不是一个缓慢的networking上传是相关的,至less从手动testing,我不知道NetBalancer是多么可靠。

更新:更新风帆到0.12.1和节点到5.8.0,但问题依然存在。

谢谢

我意识到这个问题是什么。 它几乎只提供了上传速度较低的连接,特别是上传图片时,问题是如果队长在检测到文件input时处理表单数据(即使input文件为空,似乎也会发生这种情况),会closures文本inputstream,所以他们永远不会被捕获。 现在,解决scheme是格式化你的表单,使得文件input放在所有其他input之后(因为html规范规定浏览器必须按顺序发送input),但是这并不总是可能的,风格的变化,所以我提出的解决scheme是使用这个小片段:

 (function () { var $form = $('form[enctype="multipart/form-data"]'); var $fileInputs = $($form.find('input[type="file"]')); $form.submit(function() { $fileInputs.detach(); $form.append($fileInputs); }) })(); 

它将表单中的文件input分离出来并附加到最​​后,所以它们总是被最后发送。

我相信风帆有inputsorting的重要性,但它很容易错过,他们应该在他们的主页上发出一个巨大的警告关于这个…