【发布时间】:2017-05-31 21:24:29
【问题描述】:
正如标题所说,我只想在服务器上生成一个图像,然后通过 Iron Router 在浏览器中提供它。
这是我目前所拥有的:
服务器/methods.js:
Meteor.methods({
getImage(cardId, styleId) {
var canvas = new Canvas(500, 200);
var ctx = canvas.getContext('2d');
ctx.font = '26px "Comic Sans"';
ctx.fillText('Hello World', 50, 80);
var buffer = canvas.toBuffer();
buffer = canvas.toDataURL();
return buffer;
}
});
routes/routes.js:
Router.route('/i/:cardid/:styleid.png', function() {
var imgContent = Meteor.call('getImage', this.params.cardid, this.params.styleid);
//imgContent = `<html><body><img src="${imgContent}"></body></html>`;
this.response.writeHeader('200', {
'Content-Type': 'image/png',
'Content-Length': imgContent.length
});
this.response.write(imgContent);
this.response.end();
}, {where: 'server'});
如果我取消注释 routes.js 中的行并注释掉 image/png 标头,我可以让图像显示在 HTML 图像标记内,但这不是我想要的,因为我只想提供服务实际图像,没有 HTML。
任何帮助将不胜感激。谢谢!
编辑 我也试过返回这个:
var buffer = canvas.toBuffer();
//buffer = canvas.toDataURL();
buffer = new Buffer(buffer, 'binary').toString('base64');
没有成功。
编辑 2 基本上我正在尝试这样做:NodeJS: serve png generated by node-canvas 但只有 Meteor、Canvas 和 Iron Router。
【问题讨论】:
-
我不相信这在路由器中是可能的。路由器想要渲染一个 html 模板。 Meteor 将自动在模板周围添加
<html><head>...</head><body> </body></html>。
标签: javascript node.js meteor canvas iron-router