2016-12-08 3 views
0

Я пытаюсь создать REST API, используя стек MEAN, и я столкнулся с проблемой. Я сохраняю файл .txt, отправленный в запрос POST на сервер, и сохраняю его, используя multer в папке/uploads. Затем я сохраняю информацию req.file в коллекции на mongodb (путь включен).Отправить файл обратно после запроса GET Node.js

Проблема, с которой я сталкиваюсь сейчас, заключается в том, что я хочу иметь возможность обрабатывать запрос GET для этого конкретного файла с ObjectId. Однако я хочу получить файл из пути к файлу, а затем отправить его пользователю, выполнив запрос GET.

Сейчас я возвращаю информацию, соответствующую переданному объекту, а не файлу. Как я могу отправить весь .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

В конце концов я, наконец, получил сервер для ответа на запрос 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'}); 
       } 
      }); 

Это позволило мне отправить файл обратно, получив полный путь к файлу.

Смежные вопросы