节点 JS 中的内存错误 (node::smalloc::Alloc)

memory error in node JS (node::smalloc::Alloc)

我是 node Js 的新手,我构建了一个非常简单的服务器,可以将我请求的 zip 文件发回给我。一切正常,但在一些请求后发生崩溃,我在终端上看到这条消息:

致命错误:node::smalloc::Alloc(v8::Handle, size_t, v8::ExternalArrayType) 内存不足

var http = require('http');
var url = require('url');
var fs = require('fs');

var port = 1337;


// create http server
var server = http.createServer(function (request, response) {

 var path = require('url').parse(request.url, true);
 console.log('requested ' + path.pathname);

 //get zipped resoures
 if (path.pathname == '/getzip') {
  console.log(request.url);
  var queryData = url.parse(request.url, true).query;
  if (queryData.name) {
   var filename = queryData.name;
   //open corrisponding file
   var zipFile = fs.readFileSync('packets/' + filename);
   response.writeHead(200, {
          'Content-Type': 'application/x-zip',
          'Content-disposition': 'attachment; filename=data.zip'
     });
     //send file in response
   response.end(zipFile);
  }
  else {
   response.writeHead(200, {'Content-Type': 'text/plain'});
    response.end('{error = "bad url"}');
  }
 }

}).listen(port);
server.timeout = 1000000;

你知道它可以是什么吗?这段代码看起来很简单。

您应该利用 streams 而不是将整个文件读入内存:

response.writeHead(200, {
  'Content-Type'        : 'application/x-zip',
  'Content-disposition' : 'attachment; filename=data.zip'
});
fs.createReadStream('packets/' + filename).pipe(response);