我是 Node Js 的新手,我构建了一个非常简单的服务器,它可以向我发送我请求的 zip 文件。一切正常,但在某些请求之后发生崩溃,我在终端上看到了此消息:
fatal error :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);
关于javascript - Node JS 中的内存错误 (node::smalloc::Alloc),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31856829/