节点JS客户端代码下载文件

我有以下节点js代码转储mysql数据库并将zip文件保存在服务器上:

/* DUMP - database */ var mysqldump = child_process.exec(['mysqldump -u root --password='+db_pass+' '+db_name+' | zip --password '+db_zip+' > '+process.env.PWD+'/'+rows[0].name+'-'+date+'.zip']); /* DUMP - zip created */ mysqldump.on('exit', function(){ /* DOWNLOAD - backup zip */ res.writeHead(200, { 'Content-Disposition': 'attachment;filename='+rows[0].name+'-'+date+'.zip', 'Content-Type': 'application/x-gzip', 'Cache-Control': 'no-cache' }); /* PIPE - backup zip */ var zip = fs.createReadStream(process.env.PWD+'/'+rows[0].name+'-'+date+'.zip', 'utf-8').pipe(res); /* DELETE - backup zip */ zip.on('finish', function() { fs.unlink(process.env.PWD+'/'+rows[0].name+'-'+date+'.zip', function() {}); res.end(); }); }); 

文件成功创build在服务器上,但我需要客户端代码来下载这个文件..如果我把手动链接在铬下载文件下载文件…我尝试使用:

 location ='http://'+window.location.host+'/backup'; 

它下载文件,但是当打开zip文件它说错误的头文件已损坏…所以问题是:

我怎么能在客户端读取JavaScript文件,并将其与zip扩展名保存,使文件正确下载? 有些东西,读取pipe道输出二进制文件,并保存下载时完成作为客户端的zip文件。

已更新完整服务器代码:

 /** * DEFINE * @backup create */ panel.get('/backup', function(req, res) { /* DEFINE - variables */ var date = new Date().getFullYear() + "" + ("0" + (new Date().getMonth() + 1)).slice(-2) + "" + ("0" + (new Date().getDate())).slice(-2); /* READ - settings */ pool.query("SELECT name FROM settings",function(err, rows, fields){ /* CHECK - error */ if (err) { res.json({"code" : 100, "status" : err}); return; }; /* FOUND - settings */ if (rows.length) { /* DUMP - database */ var mysqldump = child_process.exec(['mysqldump -u root --password='+db_pass+' '+db_name+' | zip --password '+db_zip+' > '+process.env.PWD+'/'+rows[0].name+'-'+date+'.zip']); /* DUMP - zip created */ mysqldump.on('exit', function(){ /* DOWNLOAD - backup zip */ res.writeHead(200, { 'Content-Disposition': 'attachment;filename='+rows[0].name+'-'+date+'.zip', 'Content-Type': 'application/x-gzip', 'Cache-Control': 'no-cache' }); /* PIPE - backup zip */ var zip = fs.createReadStream(process.env.PWD+'/'+rows[0].name+'-'+date+'.zip', 'utf-8').pipe(res); /* DELETE - backup zip */ zip.on('finish', function() { fs.unlink(process.env.PWD+'/'+rows[0].name+'-'+date+'.zip', function() {}); res.end(); }); }); } else { /* RETURN - settings error */ res.json({"status": "false", "message": "Backup NOT Available!"}); } }); });