如何更改skipper maxTimeToBuffer属性

时间:2015-11-12 12:41:14

标签: node.js sails.js skipper

我正在使用skipper和skipper-azure一次上传多个文件,如果我上传少量文件,一次说20到30,每件事情都可以,但是如果我上传更多文件,如200或300我开始某些文件收到以下错误,即只有两个或三个文件而不是所有文件。

  

上游在插入接收器之前超时

在sails> node_modules> skipper> Standalone> Upstream> Upstream.js文件中有一个属性maxTimeToBuffer,当我将其更改为4500我的代码正常时,其默认值为10000很好,我测试了100多次。

我的问题是

  • 这种变化有什么影响?
  • 是否有任何地方我可以覆盖此配置而不是 更改主文件我不希望此配置消失 每次更新。

提前感谢你们的任何帮助

2 个答案:

答案 0 :(得分:0)

在sails.js v0.12中,属性maxTimeToBuffer是一个可自定义的属性,可以添加到config / http.js文件中以覆盖默认值4500ms,即等待任何给定的实时上游的最大毫秒数在开始接收传入文件上传后插入接收器。

要使用可自定义的属性,您必须先取消对直接调用的注释,以取消需要的队长。

// bodyParser: require('skipper')({strict: true})

关于这一变化的影响,官方风帆documentation澄清了这一点:

  

在开始接收传入文件上载后,等待任何给定的实时上游插入接收器的最大毫秒数。船长暂停上游以允许您的应用程序的策略和控制器操作中的自定义代码运行(例如,执行数据库查找),然后再插入"插入"传入的文件上传(例如req.file(' avatar')。upload(...))到您想要的上传目标(本地磁盘,S3,gridfs等)。使用内置于Node.js流的缓冲和TCP背压的组合来管理传入字节。最大缓冲时间是一个可配置的防御层,用于防止拒绝服务攻击,这些攻击试图使用挂起的文件上载来淹没服务器。如果超出超时,将触发EMAXBUFFER错误。针对这些类型的攻击的最佳防御措施是尽可能在控制器操作的顶部将传入的文件上传插入接收器。

答案 1 :(得分:0)

我遇到了同样的问题......您必须修改位于config文件夹中的http.js文件...您必须执行以下操作:

passportInit: require('passport').initialize(),
passportSession: require('passport').session(),

bodyParser: (function _configureBodyParser(){
  var skipper = require('skipper');
  var middlewareFn = skipper({
    strict: true,
    maxTimeToBuffer: 100000,
  });
  return middlewareFn;
})(),

order: [
  'cookieParser',
  'session',
  'passportInit',
  'passportSession',
  'bodyParser',
  'compress',
  'poweredBy',
  '$custom',
  'router',
  'www',
  'favicon',
]

}