#node.js #express #handlebars.js
Вопрос:
Я дополняю свой файл handelbrake шаблоном, а затем использую puppeteer для создания pdf-файла, но функция hbs.complie() возвращает неопределенное значение.
Вот функция для визуализации шаблона
async function renderTemplate(data, templateName) { const filePath = path.join(__dirname, "templates", `${templateName}.hbs`); if (!filePath) { throw new Error(`Could not find ${templateName}.hbs in generatePDF`); } console.log(filePath); const html = await fs.readFile(filePath, "utf-8"); return hbs.compile(html)(data); }
Я использую эту функцию в express следующим образом:
app.get("/generate-pdf", async (req, res) =gt; { const htmlContent = await renderTemplate({ name: "test" }, "test"); console.log("Content: ", htmlContent); await generatePDF("test.pdf", htmlContent); res.sendFile(path.join(__dirname, "test.pdf")); });
Я, кажется, не знаю, в чем проблема, может ли кто-нибудь помочь.
Ответ №1:
Эта строка всегда будет ложной, потому что это строка.
if (!filePath) { throw new Error(`Could not find ${templateName}.hbs in generatePDF`); }
пробовать
if (!fs.existsSync(filePath)) { throw new Error(`Could not find ${templateName}.hbs in generatePDF`); }
Если это не приводит к ошибке, скорее всего, в вашем шаблоне есть неопределенный параметр или недопустимый синтаксис.
Комментарии:
1. Он не выдает никаких ошибок, которые я пробовал по-вашему, но
htmlContent
всегда не определен.2. поместите блок try catch вокруг функции компиляции, зарегистрируйте ошибку в консоли и проверьте свой журнал
3. нет ничего в try catch, я пробовал, может быть, шаблон неправильный?