2016-08-11 4 views
1

Я расколол себе голову над этим, я пытаюсь отобразить EJS-файл и сохранить результат в виде HTML-файла. Сохраняющаяся часть, похоже, работает, но я не могу получить полную информацию о том, как вернуть данные из файла шаблона.визуализируйте шаблон EJS и сохраните его как файл.

var fileName = 'public/cv/' + userID + '_default.html'; 
    var stream = fs.createWriteStream(fileName); 
    function buildHtml(request) { 

     var sveducations = JSON.parse(SQReducations); 
     var header = ''; 

     return '<!DOCTYPE html>' 
      + '<html><header>' + header + '</header><body>' + 
       html 
      + 
      '</body></html>'; 
    }; 
    stream.once('open', function (fd) { 
     var html = buildHtml(); 
     stream.end(html); 
    }); 
+0

прежде всего ' '+ HTML +'' переменной HTML, кажется, не может быть определена. Что вы имеете в виду, как вернуть данные из файла шаблона? –

ответ

2

Это самый простой способ сохранить html-строку, переданную из ejs.

var ejs = require('ejs'); 
var fs = require('fs'); 
var data = {} // put your data here. 

var template = fs.readFileSync('./template.ejs', 'utf-8'); 
var html  = ejs.render (template , data); 

fs.writeFileSync("./html.html", html, 'utf8'); 

Если вы хотите, чтобы прочитать данные из файла JSON

var data JSON.parse(fs.readFileSync('./data.json', 'utf8')); 
/12 редактировать

Использование попытаться поймать, чтобы получить сообщение об ошибке.

try { 

var ejs = require('ejs'); 
var fs = require('fs'); 
var data = {} // put your data here. 

var template = fs.readFileSync('./template.ejs', 'utf-8'); 
var html  = ejs.render (template , data); 

fs.writeFileSync("./html.html", html, 'utf8'); 

}catch (e){ 
    console.log(e) <-- If any error is thrown, you can see the message. 
} 
+0

по какой-то причине это не сработает. –

+0

Где и как, какое сообщение об ошибке вы получили? –

+0

Я отредактировал мой ответ, пожалуйста, используйте try catch, чтобы получить информацию об ошибках. –

0

Теперь вам не нужно больше, чтобы загрузить шаблон с ReadFile() или readFileSync() вызова. Вы можете просто использовать ejs.renderFile (pathToTemplate, данные, кал):

const data = {}; 

ejs.renderFile(path.join(__dirname, '../views/template.ejs'), data, (err, result) => { 
    if (err) { 
     logger.log('info', 'error encountered: ' + err); 
     // throw err; 
    } 
    else { 
     try { 
      fs.writeFileSync('./html.html', result, 'utf8'); 
     } catch(err) { 
      if (err) { 
       throw err; 
      } 
     } 

    } 
});