2012-09-17 8 views
8

Czy istnieje sposób przeskanowania obrazu o zmienionym rozmiarze do mojej ekspresowej odpowiedzi?Rozmiar okna NodeJS gm i potok do odpowiedzi

Coś wzdłuż linii:

var express = require('express'), 
    app = express.createServer(); 

app.get('/', function(req, res){ 

    gm('images/test.jpg') 
     .resize(50,50) 
     .stream(function streamOut (err, stdout, stderr) { 
      if (err) return finish(err); 
      stdout.pipe(res.end, { end: false }); //suspect error is here... 
      stdout.on('end', function(){res.writeHead(200, { 'Content-Type': 'ima ge/jpeg' });}); 
      stdout.on('error', finish); 
      stdout.on('close', finish); 
    }); 
}); 

app.listen(3000); 

To niestety powoduje błąd ...
całkiem pewny Mam trochę składnia źle.

Odpowiedz

13

Twoje pytanie faktycznie pomogło mi uzyskać odpowiedź na ten sam problem. Jak to działa dla mnie:

var express = require('express'), 
    app = express.createServer(); 

app.get('/', function(req, res, next){ 

    gm('images/test.jpg') 
     .resize(50,50) 
     .stream(function streamOut (err, stdout, stderr) { 
      if (err) return next(err); 
      stdout.pipe(res); //pipe to response 

      // the following line gave me an error compaining for already sent headers 
      //stdout.on('end', function(){res.writeHead(200, { 'Content-Type': 'ima ge/jpeg' });}); 

      stdout.on('error', next); 
    }); 
}); 

app.listen(3000); 

usunąłem wszelkie odniesienia do funkcji zakończyć, ponieważ nie jest zdefiniowane i wysłał błąd wyrazić obsługi błędów. Mam nadzieję, że to komuś pomaga. Chciałbym też dodać, że używam Express 3, więc tworzenie serwera jest nieco inne.

+0

Próbowałem to samo, ale ja dostać 'Content-Length: 0' w moich nagłówków odpowiedzi i brak danych dotyczących odpowiedzi. Czy spotkałeś się z tym? – Larrydx

+0

Nie, nie przydarzyło mi się to ... ale ten przykład jest tak przestarzały, że każda zmiana w którejkolwiek z bibliotek może być przyczyną problemu, z którym ma się do czynienia (ma 5 lat). Może masz problemy z odczytaniem obrazu? –

+0

Właściwie, zapomniałem dodać 'imagemagick' jako zależności dla gm, co spowodowało błąd, którego nie pokazano na mojej konsoli. Dzięki i tak! – Larrydx

4

Otrzymujesz błąd, ponieważ chcesz pisać do res po podłączeniu obrazu. Spróbuj ustawić nagłówki przed you rury obrazu:

var express = require('express'), 
    app = express.createServer(); 

app.get('/', function(req, res){ 

    res.set('Content-Type', 'image/jpeg'); // set the header here 

    gm('images/test.jpg') 
    .resize(50,50) 
    .stream(function (err, stdout, stderr) { 
     stdout.pipe(res) 
    }); 
}); 

app.listen(3000); 
Powiązane problemy