我無法在meteorjs中使用imagemagick。我正在處理一個小的svg-> png轉換器,其中包含一個用於提供轉換圖像的rest api。我用流星路由器實現了其餘的api。 imagemagick轉換工作。但是,我無法將轉換的結果寫入http響應。我試圖通過使用光纖消除異步性來解決這個問題。但這仍然行不通。基本上,所有request.write調用在yield執行後都會被忽略。這裏是我的代碼:imagemagick在meteorjs(藉助流星路由器和光纖)
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();
}
});
我非常新的meteorjs。因此,我可能會使用完全錯誤的光纖。或者我不應該使用光纖。有人可以幫忙嗎?
我不認爲你的問題與光纖有關,如果'convert.on('data',...)'回調從不觸發。你確定這個代碼在香草節點工作嗎?你在使用node-imagemagick(https://github.com/rsms/node-imagemagick)嗎?我在他們的文檔中找不到對'.on'的引用 - 他們建議將第二個回調參數傳遞給'.convert'。 – avital