Node.js - отображать HTML как изображение или PDF. Работает локально, падая на сервер
Я работаю с Node и пытаюсь получить базовую настройку веб-сервера, которая будет принимать HTML и возвращать либо PDF, либо изображение в зависимости от используемого маршрута.
Ниже работает, когда работает на моем локальном компьютере. Я разместил его на двух разных серверах, один из которых использует Apache, а другой - Nginx. В обоих случаях не удается вернуть изображение или PDF. Маршрут PDF возвращает 502, а маршрут с изображением возвращает пустое изображение.
Возможно, я поступаю неправильно, но сейчас я немного растерялся из-за того, что мне не хватает. Любые указатели будут с благодарностью.
var url = require('url');
var http = require('http');
var wkhtmltox = require('wkhtmltox');
var converter = new wkhtmltox();
// Locations of the binaries can be specified, but this is
// only needed if the programs are located outside your PATH
// converter.wkhtmltopdf = '/opt/local/bin/wkhtmltopdf';
// converter.wkhtmltoimage = '/opt/local/bin/wkhtmltoimage';
http.createServer(function (req, res) {
console.log(url.parse(req.url, true).query);
if (req.url == "/pdf") {
res.writeHead(200, {'Content-Type': 'application/pdf'});
converter.pdf(req, url.parse(req.url, true).query).pipe(res);
} else if (req.url == "/image") {
res.writeHead(200, {'Content-Type': 'image/png'});
converter.image(req, { format: "png" , quality: 75 }).pipe(res);
} else {
res.end('Control is an illusion.');
}
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');
Это ошибка, записанная на сервере для маршрута PDF. Нет ошибок для маршрута изображения.
Error: This socket has been ended by the other party
at Socket.writeAfterFIN [as write] (net.js:285:12)
at performWork (/var/www/app_name/node_modules/wkhtmltox/lib/wkhtmltox.js:98:22)
at wkhtmltox.pdf (/var/www/app_name/node_modules/wkhtmltox/lib/wkhtmltox.js:113:16)
at Server.<anonymous> (/var/www/app_name/index.js:16:14)
at emitTwo (events.js:106:13)
at Server.emit (events.js:191:7)
at HTTPParser.parserOnIncoming [as onIncoming] (_http_server.js:543:12)
at HTTPParser.parserOnHeadersComplete (_http_common.js:105:23)
Я тестировал с помощью curl.
curl -d @file_to_render.html -s "http://localhost:1337/pdf" -o test.pdf
curl -d @file_to_render.html -s "http://localhost:1337/image" -o test.png
2 ответа
Пожалуйста, попробуйте эту команду, я решил эту команду
sudo apt-get install libfontconfig
Попробуйте добавить событие onError в канал
converter.image(req, { format: "png" , quality: 75 }).pipe(res).on('error', function(e){ console.log(e); });