在GET请求Node.js之后发回文件

时间:2016-12-08 15:58:54

标签: node.js mongodb api mean-stack multer

我正在尝试使用MEAN堆栈构建REST API,但我遇到了问题。我正在将POST请求中发送的.txt文件保存到服务器,并使用multer将其保存在/ uploads文件夹中。然后我将req.file信息保存在mongodb(包含路径)的集合中。

我现在遇到的问题是我希望能够使用ObjectId处理该特定文件的GET请求。但是,我希望能够从文件路径获取文件,然后将其发送给发出GET请求的用户。

现在我只返回与传递的ObjectId相对应的信息,而不是文件。如何将整个.txt文件发回给用户?

exports.findById = function(req, res) {
try
{
    var id = new require('mongodb').ObjectID(req.params.id);
    console.log('Retrieving log: ' + id);

    db.collection('logs', function(err, collection) {
        if(err)
        {
            console.log(err);
        }
        else
        {
            collection.findOne({'_id':id}, function(err, item) {
                if (err) {
                    console.log('Error finding log: ' + err);
                    res.send({'error':'An error has occurred'});
                } else {
                    console.log('' + item + ' found log');
                    console.log(item.path);
                    var file = __dirname + item.path;
                    res.download(file);
                    //res.send(item);
                }
            });
        }
    });
}
catch (e)
{
    console.log('Id passed not correct');
    res.send({'error':'Id passed not correct'});
}

};

1 个答案:

答案 0 :(得分:0)

最后,我终于让服务器响应GET请求。

我必须找到已保存到数据库中的文件的文件路径。

collection.findOne({'_id':id}, function(err, item) {
                if (err) 
                {
                    console.log('Error finding log: ' + err);
                    res.send({'error':'An error has occurred'});
                }
                if (item)
                {
                    //Create the path of the file wanted
                    filepath = path.join(__dirname, "../uploads", path.normalize(item.filename));
                    //Send file with the joined file path
                    res.sendFile(filepath);
                } 
                else 
                {
                    console.log("Could not find entry");
                    res.send({'error':'No match found'});
                }
            });

这使我能够通过获取文件的完整路径来发回文件。