2015-09-11 12 views
5

Mi piacerebbe generare e servire un file .png usando il nodo-canvas. Utilizzando Express, questo è quello che ho fatto finora:NodeJS: serve png generato dal nodo-canvas

draw_badge.js

function draw() { 
    var Canvas = require('canvas'), 
     Image = Canvas.Image, 
     canvas = new Canvas(200, 200), 
     ctx = canvas.getContext('2d'); 

    ctx.font = '30px Impact'; 
    ctx.rotate(0.1); 
    ctx.fillText('Awesome!', 50, 100); 

    return canvas; 
} 

module.exports = draw; 

badge.js

var express = require('express'); 
var router = express.Router(); 
var draw = require('../lib/draw_badge.js'); 

router.get('/show', function (req, res, next) { 
    res.setHeader('Content-Type', 'image/png'); 
    res.end(draw()); 
}); 

module.exports = router; 

Ma quando vado al percorso nel mio browser , Non vedo alcun png. La mia comprensione del nodo non è abbastanza ferma per capire cosa sta succedendo. Qualcuno può indicarmi la giusta direzione?

risposta

6

Prova questa i n badge.js:

var express = require('express'); 
var router = express.Router(); 
var draw = require('../lib/draw_badge.js'); 

router.get('/show', function (req, res, next) { 
    res.setHeader('Content-Type', 'image/png'); 
    draw().pngStream().pipe(res); 
}); 

module.exports = router; 

Avviso del codice draw().pngStream().pipe(res);

Si otterrà un flusso PNG dal Canvas e la volontà tubo di questo flusso al flusso di risposta. Facendo le cose in questo modo, non è necessario chiamare lo res.end(), perché quando il flusso PNG terminerà, anche il flusso di risposta verrà terminato.

+0

Grazie. Avrei dovuto controllare più attentamente l'API. –