Nodejs下载文件错误处理

时间:2017-02-07 20:13:13

标签: node.js

如果一切正常,我可以使用nodejs成功地将文件从服务器下载到客户端。

但如果发生错误, 我想只返回错误消息。但我现在得到的是一个包含错误json的下载文件abc.txt。如何解决这个问题?

//server side code, get like /download?filename=abc.txt
app.get('/download', function(req, res){

    var filename_para = req.query.filename; // abc.txt

    if( filename_para == undefined)
    {
        console.log('no filename provided');    
        res.send('no filename provided');// this works
        return;
    }

    var file = __dirname + '/uploads/' + filename_para;

    var filename = path.basename(file);
    var mimetype = mime.lookup(file);

    res.setHeader('Content-disposition', 'attachment; filename=' + filename);
    res.setHeader('Content-type', mimetype);

    var filestream = fs.createReadStream(file);

    filestream.on('error', function(err) {
         console.log('error '+err); 
        // filestream.close();
        res.send(err);// this error is in abc.txt???

    });

    filestream.on('finish', function() {
        console.log('finish');  
    });


    filestream.pipe(res);
});

1 个答案:

答案 0 :(得分:2)

您已经在响应对象上设置了内容类型和内容处置标头。如果要将err作为json返回,请在调用application/json之前删除content-disposition标头并将内容类型设置为res.send(err);