2012-09-17 13 views
8

¿Hay alguna forma de canalizar la imagen redimensionada a mi respuesta expresa?NodeJS gm redimensiona y canaliza a la respuesta

Algo a lo largo de las líneas de:

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); 

Esto, desafortunadamente, provoca un error ...
bastante seguro de que tengo una sintaxis incorrecta.

Respuesta

13

su pregunta en realidad me ayudó a obtener la respuesta para el mismo problema. ¿Cómo funcionó para mí:

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); 

me eliminado toda referencia a la función de terminar ya que no está definido y se envía el error de expresar gestor de errores. Espero que ayude a alguien. También me gustaría agregar que estoy usando Express 3, por lo que crear el servidor es ligeramente diferente.

+0

he intentado lo mismo pero obtengo 'Content-Length: 0' en mis cabeceras de respuesta y no existen datos en la respuesta. ¿Te encontraste con esto? – Larrydx

+0

No, no me pasó ... aún así, este ejemplo está tan desactualizado que cualquier cambio en cualquiera de las bibliotecas puede estar causando el problema al que se enfrenta (tiene 5 años). Tal vez estás teniendo problemas para leer la imagen? –

+0

En realidad, había olvidado agregar 'imagemagick' como una dependencia para gm y eso causaba un error que no se mostraba en mi consola. ¡Gracias de cualquier manera! – Larrydx

4

Recibirá el error porque desea escribir al res después de que haya canalizado la imagen. Intenta definir los encabezados se canaliza la imagen antes:

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); 
Cuestiones relacionadas