NodeJS gm调整大小并管道响应

Ale*_*lex 8 imagemagick node.js

有没有办法将调整大小的图像传递给我的快速响应?

有点像:

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);
Run Code Online (Sandbox Code Playgroud)

不幸的是,这会导致错误...
很确定我的语法有些错误.

Mar*_*ema 13

你的问题实际上帮助我得到了同样问题的答案.它对我有用:

    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);
Run Code Online (Sandbox Code Playgroud)

我删除了所有对finish函数的引用,因为它没有定义,并发送错误来表达错误处理程序.希望它可以帮助某人.我也想添加我使用快递3,所以创建服务器略有不同.


zem*_*rco 6

您收到错误是因为您想res在管道传输图像后写入.在管道映像之前尝试设置标题:

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);
Run Code Online (Sandbox Code Playgroud)