Handelbars функция complie (), возвращающая неопределенное значение

#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, я пробовал, может быть, шаблон неправильный?