8

サイズ変更された画像をエクスプレスレスポンスにパイプする方法はありますか?

次のようなもの:

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

残念ながら、これによりエラーが発生します...
構文が間違っていることは間違いありません。

4

2 に答える 2

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

定義されていないため、finish関数へのすべての参照を削除し、エラーハンドラーを表すためにエラーを送信しました。それが誰かを助けることを願っています。また、Express 3を使用していることを追加したいので、サーバーの作成は少し異なります。

于 2012-09-30T21:21:43.250 に答える
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);
于 2012-09-30T21:48:49.790 に答える