从Node.js中的Json对象下载文件

时间:2014-08-21 19:32:14

标签: javascript json node.js

我是NodeJS的新手。我试图从json对象下载文件。我有从Mongodb集合收到的json对象,我想将json数据作为文件列表返回。我试图从我的本地机器下载文件,并且代码有效。但是无法理解我应该如何从json对象返回文件。我需要使用Buffer吗?到目前为止,我有以下测试代码。

    //Write Member File
exports.File  = function(req, res){
    var data =  getdata(function(err, members){
        //console.log(members);

//        var bf = buffer.Buffer(members, 'Binary').toString('base64');
//        console.log(bf.length);
        // I get bf.length as 4
        var file = 'C:/Docs/members.txt';
        var filename = path.basename(file);
        console.log(filename);
        var mimetype = 'text/plain';
        res.setHeader('Content-disposition', 'attachment; filename=' + filename);
        res.setHeader('Content-type', mimetype);
        var fileStream =  fs.createReadStream(file);
        fileStream.pipe(res);
    });
};

3 个答案:

答案 0 :(得分:3)

你可以试试这个。

function(req, res) {
    var jsonObj = getJSON();
    var data = JSON.stringify(jsonObj);
    res.setHeader('Content-disposition', 'attachment; filename= myFile.json');
    res.setHeader('Content-type', 'application/json');
    res.write(data, function (err) {
        res.end();
    }
});

答案 1 :(得分:1)

这适用于我。

var user = {"name":"azraq","country":"egypt"};
var json = JSON.stringify(user);
var filename = 'user.json';
var mimetype = 'application/json';
res.setHeader('Content-Type', mimetype);
res.setHeader('Content-disposition','attachment; filename='+filename);
res.send( json );

答案 2 :(得分:0)

  

我是否需要使用Buffer。

不,你对响应.write()的简单字符串就足够了。

exports.returnData = function(req, res){
    getdata(function(err, members){
        console.log(members); // I guess you have an object here, not a plain response
        var json = JSON.stringify(members); // so let's encode it

        var filename = 'result.json'; // or whatever
        var mimetype = 'application/json';

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