Получить HTML-источник отображаемого ejs в виде строки

#javascript #html #node.js

#javascript #HTML #node.js

Вопрос:

У меня есть этот фрагмент кода внутри контроллера:

 exports.getintroDetails = async (req, res) => {
    try {
      const details = await IntroModel.find();
      return res.render("final", { details , user:req.user });
    } catch (error) {
      console.log(error.message);
    }
};
 

Этот код, как и ожидалось, отображает конечный файл.ejs с заданными данными.

Но вместо этого я хочу показать необработанный html, который мы получаем после рендеринга final.ejs с заданными данными. Есть ли какой-нибудь способ сохранить необработанный HTML-код в виде строки вместо его рендеринга?

Итак, вместо того, чтобы:

 return res.render("final", { details , user:req.user });
 

Я хочу что-то вроде этого:

 return res.send( view-source( res.render("final", { details , user:req.user }) ) );
 

Есть ли какая-либо функция, подобная view-source() описанной выше?

Комментарии:

1. Эмм, просто прочитайте вопрос еще раз.. Вы хотите иметь необработанный html?? Или html перед отправкой? Для получения необработанного html вы можете прочитать файл шаблона, используя fs . ..

2. @SilvanBregy я имею в виду html перед отправкой…

3. Хорошо, это в моем ответе ^^

Ответ №1:

Согласно документам, вы можете предоставить a callback , который будет выполнен с отображением html . Когда предоставляется обратный вызов, ответ не будет выполнен автоматически.

 exports.getintroDetails = async (req, res) => {
    try {
      const details = await IntroModel.find();
      return res.render("final", { details , user:req.user }, (err, html) => {

        console.log('rendered html!', html)

        // now, the response has to be made manually.
        res.status(200).send(html)
      });
    } catch (error) {
      console.log(error.message);
    }
};
 

Также возможно отобразить его, используя app.render() только для получения html .

Из документов

Подумайте о app.render() как о служебной функции для генерации отображаемых строк представления. Внутренне res.render() использует app.render() для отображения представлений.

 app.render('final', function (err, html) {
  // ...
})

 

Комментарии:

1. html не определено.

2. и err ?? . я только что протестировал res.render() локально, и это сработало. Я использовал "express": "4.16.x",