如何更改Skipper的maxTimeToBuffer属性

7
我正在使用skipper和skipper-azure一次上传多个文件,如果我一次上传少量文件,比如20到30个文件,一切正常,但是如果我上传更多的文件,比如200或300个文件,我就会收到以下错误信息,即仅对于其中两个或三个文件而非所有文件:

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

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

我的问题是:

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

提前感谢您们的任何帮助。


您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Pascal Martineau
2个回答

1
我遇到了同样的问题...你需要修改位于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',
]

}


1
在 sails.js v0.12 中,maxTimeToBuffer 属性是一个可自定义的属性,可以添加到 config/http.js 文件中,以覆盖默认值 4500ms,即在接收传入文件上传后,等待任何给定的实时上游插入接收器的最大毫秒数。
要使用可自定义的属性,您必须先取消注释对 require skipper 的直接调用。
// bodyParser: require('skipper')({strict: true})

关于此更改的影响,官方 sails 文档 已经进行了解释:

等待任何已连接到接收器的活动上游(upstream)在开始接收传入文件上传后的最大毫秒数。Skipper 暂停上游以允许您的应用程序策略和控制器操作中的自定义代码运行(例如执行数据库查找),然后将传入的文件上传(例如 req.file('avatar').upload(...))“插入”到所需的上传目标(本地磁盘、S3、gridfs 等)中。使用 Node.js 流内置的缓冲和 TCP 回压来管理传入的字节。最大缓冲时间是一种可配置的防御层,用于保护服务器免受试图通过挂起文件上传来淹没服务器的拒绝服务攻击。如果超时,则会触发 EMAXBUFFER 错误。对抗这些类型攻击的最佳方法是在控制器操作的顶部尽早将传入的文件上传插入到接收器中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接