Express-handlebars отображает файл в div

Я получаю путь к файлу с моего сервера NodeJs. Например

  • files/texts/aMarkdownFile.md

  • files/images/bigImage.jpg

  • files/texts/aTextFile.txt

и я хочу отобразить содержимое этого файла в моем div Handlebars

<div id="renderedFileContainer">
    {{requestedFile}}
</div>

Как я могу это сделать? Github например может отображать файлы и изображения уценки в представлении репозитория. Вы можете посмотреть здесь https://github.com/thenativeweb/wolkenkit (просто пример). Если нет другого способа, кроме создания кода для каждого типа файлов, я хочу сосредоточиться на файлах уценка.

Сервер берет путь к файлу и отправляет его в шаблон Handlebars. Как я могу заставить шаблон отображать файл в контейнере div?

0
0
528
1

Ответы 1

Вам нужно использовать nodejs для чтения содержимого файла в строку, а затем передать это в свой шаблон руля.

Есть два способа сделать это. Первый (и самый простой) - использовать fs.readFile или fs.readFileSync для чтения содержимого файла, а затем передать это как значение requestedFile.

Второй способ - создать помощник по рулю, этот помощник может использовать путь к файлу, а затем внутренне использовать fs.readFile / fs.readFileSync, как указано выше. Разница здесь в том, что ваш слой просмотра будет читать и возвращать файл. Это полезно, если вы собираетесь использовать это во всем своем приложении, если это только в одном месте, то, возможно, создание помощника - излишнее. Вот документация по созданию помощника руля.

В любом случае вам нужно будет передать строку в шаблон, независимо от того, делаете ли вы это со смещением, или если вы заставляете ручки решать это за вас.

извините, но когда я получил файл уценки с этим содержимым ###### H6 и передал его в шаблон Handlebars, он напечатал ###### H6 в документе. Не заголовок.

hrp8sfH4xQ4 10.09.2018 15:10

В вопросе вы ничего не указали о желании отобразить уценку как HTML. Если вы хотите это сделать, вам нужно также запустить извлеченную уценку через конвертер md -> html. Для этого существует множество модулей, как интерфейсных, так и серверных. Если вы хотите сделать это на стороне сервера, я бы порекомендовал что-то вроде Showdown. Вы можете вставить извлеченный md, и тогда вы получите результат HTML, который вы можете вставить. Но тогда вам нужно будет использовать Handlebars.SafeString. Будьте очень осторожны с этим, поскольку вы открываете своих пользователей для множества атак, если вы сначала не дезинфицируете ввод.

Elliot Blackburn 10.09.2018 15:59

Другие вопросы по теме