Я не могу использовать imagemagick в метеорах. Я работаю над небольшим конвертером svg->png, который содержит API-интерфейс для предоставления преобразованных изображений. Я реализовал остальные API с помощью метеора-маршрутизатора. Преобразование imagemagick работает. Но я не могу записать результат преобразования в ответ http. Я попытался исправить это, избавившись от асинхронности с помощью оптоволокна. Но это все еще не работает. По сути, все вызовы request.write игнорируются после выполнения yield. Вот мой код:
Meteor.Router.add({
'/image/:hash' : function(hash) {
var svg = Images.findOne({'hash' : hash}).svg;
var request = this.request;
var response = this.response;
Fiber(function() {
var fiber = Fiber.current;
response.writeHead(200, {'Content-Type':'image/png'});
var convert = imagemagick.convert(['svg:-', 'png:-']);
convert.on('data', function(data) {
response.write("doesn't work");
//response.write(data);
});
convert.on('end', function() {
response.write("doesn't work");
//response.end();
fiber.run({});
});
convert.stdin.write(svg);
convert.stdin.end();
response.write("works");
Fiber.yield();
response.write("doesn't work");
}).run();
}
});
Я новичок в метеорах. Поэтому я могу использовать Fiber совершенно неправильно. Или я не должен использовать клетчатку вообще. Кто-нибудь может помочь?
convert.on('data', ...)
никогда не срабатывает. Вы уверены, что этот код работает в ванильном узле? Используете ли вы node-imagemagick (github.com/rsms/node-imagemagick)? Я не смог найти ссылку на.on
в их документации — они предлагают передать второй аргумент обратного вызова в.convert
. - person avital   schedule 14.12.2012