我有一台服务器正在提供大型文件及其支持范围请求。
但是当它即将完成时,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});
谢谢!
答案 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?
});