如何修复错误:"错误:启动必须是< = end"

时间:2014-12-08 02:10:22

标签: node.js

我有一台服务器正在提供大型文件及其支持范围请求。

但是当它即将完成时,nodejs会抛出这个错误:

fs.js:1488
      throw new Error('start must be <= end');
            ^
Error: start must be <= end
    at new ReadStream (fs.js:1488:13)
    at Object.fs.createReadStream (fs.js:1449:10)
    at inicioStream (/home/harold/fileserver/app.js:639:17)
    at fn (/home/harold/node_modules/async/lib/async.js:641:34)
    at Object._onImmediate (/home/harold/node_modules/async/lib/async.js:557:34)
    at processImmediate [as _immediateCallback] (timers.js:345:15)

我想知道它是什么以及如何解决它。

这是生成此错误的代码的一部分:

var path = __dirname + '/backup/'+location;
var rs = fs.createReadStream(path, {start: download.range.start, end: download.range.end});

谢谢!

1 个答案:

答案 0 :(得分:0)

由于用户可以通过Range HTTP标头对这些大文件进行部分请求,因此只要该范围无效,就会抛出此错误。在这种情况下,请求的范围无效,因为download.range.start的值大于download.range.end,而它必须始终相反。

因为可能会出现此错误,您需要在代码中捕获它:

var rs = fs.createReadStream(path, {start: download.range.start, end: download.range.end});
rs.on('error', function(err) {
  // code to handle error - maybe return a response saying the range is invalid?
});