send-html.js 1.35 KB
// Copyright IBM Corp. 2016. All Rights Reserved.
// Node module: strong-error-handler
// This file is licensed under the MIT License.
// License text available at https://opensource.org/licenses/MIT

'use strict';
var ejs = require('ejs');
var fs = require('fs');
var path = require('path');

var assetDir = path.resolve(__dirname, '../views');
var compiledTemplates = {
  // loading default template and stylesheet
  default: loadDefaultTemplates(),
};

module.exports = sendHtml;

function sendHtml(res, data, options) {
  var toRender = {options: {}, data: data};
  // TODO: ability to call non-default template functions from options
  var body = compiledTemplates.default(toRender);
  sendReponse(res, body);
}

/**
 * Compile and cache the file with the `filename` key in options
 *
 * @param filepath (description)
 * @returns {Function} render function with signature fn(data);
 */
function compileTemplate(filepath) {
  var options = {cache: true, filename: filepath};
  var fileContent = fs.readFileSync(filepath, 'utf8');
  return ejs.compile(fileContent, options);
}

// loads and cache default error templates
function loadDefaultTemplates() {
  var defaultTemplate = path.resolve(assetDir, 'default-error.ejs');
  return compileTemplate(defaultTemplate);
}

function sendReponse(res, body) {
  res.setHeader('Content-Type', 'text/html; charset=utf-8');
  res.end(body);
}