我正在尝试使用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'});
}
};
答案 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'});
}
});
这使我能够通过获取文件的完整路径来发回文件。