节点 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);
我是 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);