【问题标题】:Any way to render templates into a variable with Express3.x?有什么方法可以使用 Express3.x 将模板呈现为变量?
【发布时间】:2012-10-21 17:28:59
【问题描述】:

在 express3.x 中,api 谈到了 app.render('view', data, callback); 它应该和 res.render 做同样的事情,但是使用渲染数据的回调,而不是作为响应发送它。 有没有办法在路由文件中使用 app.render。这是不可能的,因为除了 app.js 之外没有任何 app 变量 也许还有其他一些简单的方法来渲染模板并将其存储为变量。 我需要它来发送 html 电子邮件。 我在我的应用程序中使用 hogan.js 模板。

谢谢

【问题讨论】:

  • reqres 上都有一个app 属性可供您使用。
  • 能否再解释一下。
  • 如果您只需要回调,只需将其添加到res.render ...我要指出的是,如果您需要访问app,您可以使用res.app.render(我认为你甚至不需要)

标签: javascript node.js express template-engine hogan.js


【解决方案1】:

您可以编写路由和模块,让应用在需要时通过该方式

module.exports = function (app) {
  return {
    'index': function(req, res, next) {
      // app is avail here 
    }
  }
}

并相应地要求它并在 app.js 中传递 app 变量

var app = module.exports = express.createServer();
var validate = require('./routes/validate')(app);

这可能不是标准方式,尤其是路由文件的编写方式可能会很尴尬。但它使应用程序可用。到您的路线。

【讨论】:

  • 我正在考虑一种方法来做到这一点,但这从来没有让我感到震惊......这会很完美。我试试看
  • 很高兴为您服务。您可能想检查不同的样式,因为任何扫描源以进行自动完成等的工具都会发疯。
【解决方案2】:

另一种方法是直接调用模板引擎。例如,如果您使用 Hogan.jsconsolidate,您可以这样做:

var hogan = require('consolidate').hogan;

hogan(path_to_template or string, rendering_values, function(err, result) {
  console.log(result);
});

我发现这比使用 app.render 更好,因为它更直接。

【讨论】:

  • 我想使用 app.render 使我的代码独立于诱人的引擎,特别是当我为不同的项目尝试其中一些但共享部分代码时
猜你喜欢
  • 2019-06-25
  • 2017-11-03
  • 1970-01-01
  • 2020-11-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多