Node.js NodeJS:由节点画布生成的服务png

Node.js NodeJS:由节点画布生成的服务png,node.js,canvas,Node.js,Canvas,我想使用节点画布生成并提供一个.png文件。使用Express,我已经完成了以下工作: 绘制徽章.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.

我想使用节点画布生成并提供一个.png文件。使用Express,我已经完成了以下工作:

绘制徽章.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;
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;
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;
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;

但是,当我在浏览器中转到路线时,我看不到任何png。我对节点的把握不够坚定,无法理解发生了什么。有人能告诉我正确的方向吗?

试试这个in 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;
注意代码
draw().pngStream().pipe(res)

它将从您的画布获取一个PNG流,并将该流通过管道传输到响应流。这样做,您不需要调用
res.end()
,因为当PNG流结束时,响应流也会结束