2015-03-31 18 views
9

Mam model w interfejsie API pętli zwrotnej i chcę go pobrać jako plik zamiast wyświetlać jako tekst. Miałem jakiś stary kod PHP, który mam spasowany przystosowany, by spróbować pobrać odpowiedź jako plik.Pobieranie pliku z pętli zwrotnej Strongloop

To jest mój kod:

Issue.afterRemote('getCSV', function(ctx, affectedModelInstance, next) { 
var result = ctx.result; 
console.log(result); 
var currentdate = new Date(); 
var datetime = currentdate.getDate() + " " + 
      + (currentdate.getMonth()+1) + " " + 
      + currentdate.getFullYear() + " " + 
      + currentdate.getHours() + ":" 
      + currentdate.getMinutes() + ":" 
      + currentdate.getSeconds(); + " "; 
ctx.res.set('Expires', 'Tue, 03 Jul 2001 06:00:00 GMT'); 
ctx.res.set('Cache-Control', 'max-age=0, no-cache, must-revalidate, proxy-revalidate'); 
ctx.res.set('Last-Modified', datetime +'GMT'); 
// force download 
ctx.res.set('Content-Type','application/force-download'); 
ctx.res.set('Content-Type','application/octet-stream'); 
ctx.res.set('Content-Type','application/download'); 
// disposition/encoding on response body 
ctx.res.set('Content-Disposition','attachment;filename=Data.csv'); 
ctx.res.set('Content-Transfer-Encoding','binary'); 
ctx.res.send(result); 

}, function(err, response) { 
if (err) console.error(err); 
// next(); 
}); 

Widziałem kwestie dotyczące pobierania existing files with loopback, ale nigdy nie pobierając odpowiedź REST jako plik.

+1

Jak wygląda twój pilot 'getCSV'? Dlaczego nie po prostu umieścić ten kod w tej zdalnej metodzie zamiast w hak? – jakerella

Odpowiedz

19

w oparciu o Twoje podejście to działa tak. W moim przypadku "organizacja" to model.

Plik: wspólne/Modele/organisation.js

Organisation.csvexport = function(type, res, callback) { 
    //@todo: get your data from database etc... 
    var datetime = new Date(); 
    res.set('Expires', 'Tue, 03 Jul 2001 06:00:00 GMT'); 
    res.set('Cache-Control', 'max-age=0, no-cache, must-revalidate, proxy-revalidate'); 
    res.set('Last-Modified', datetime +'GMT'); 
    res.set('Content-Type','application/force-download'); 
    res.set('Content-Type','application/octet-stream'); 
    res.set('Content-Type','application/download'); 
    res.set('Content-Disposition','attachment;filename=Data.csv'); 
    res.set('Content-Transfer-Encoding','binary'); 
    res.send('ok;'); //@todo: insert your CSV data here. 
}; 

a definicja Remote Method (aby uzyskać obiekt odpowiedzi)

Organisation.remoteMethod('csvexport', 
{ 
    accepts: [ 
    {arg: 'type', type: 'string', required: true }, 
    {arg: 'res', type: 'object', 'http': {source: 'res'}} 
    ], 
    returns: {}, 
    http: {path: '/csvexport/:type', verb: 'get'} 
}); 

Chociaż typ jest po prostu dostać się do różnych parametrów Eksport pliku CSV ..

Uwaga: Używam "sprzężenia zwrotnego": "^ 2.10.2",

+0

Dziękuję. Niesamowita odpowiedź. Definicja nagłówków odpowiedzi była podstępem! – Richard