在Express中使用模板引擎

来源:互联网 发布:怎么申请不了淘宝直播 编辑:程序博客网 时间:2024/05/17 01:41

定义模板引擎

var  app = express();app.set('views', './views');  // 指定模板文件存放位置app.set('view engine', 'jade')  // 设置默认的模板引擎

注册指定扩展名的模板引擎:

app.engine('jade', require('jade')._express )

注意: _express函数是许多模板引擎提供的回调函数。但是这个函数只能在默认的文件扩展名上工作。但是,有种情况我们使用的不是对应模板引擎的扩展名的怎么办呢?这时不能再调用_express函数。在这种情况下我们可以使用一个替代的函数,例如: 在EJS中提供了renderFile函数来完成相同的功能。

看下下面的两段代码:

app.engine( 'ejs', require('ejs')._express )
app.engine( '.html', require('ejs').renderFile );  // 注册html模板引擎 app.set('view engine', 'html');  // 将模板引擎换成html

一旦,扩展名被注册,引擎回调函数被调用执行呈现具有该扩展名的模板。

当使用的是express-handlebars模块时:

app.set('view engine', 'hbs');或者,使用html扩展时app.set('view engine', 'html');app.engine('html', require('hbs')._express);

当使用的是express3-handlebars方法时:

app.engine('handlebars', exphbs({defaultLayout: 'main'}));app.set('view engine', 'handlebars');

添加本地对象

express() app对象提供了app.locals属性来存储本地变量, app.locals实际上是一个函数对象,这意味着可以有两种方式来设置变量。

方式一:

app.locals.title = "Hello World";app.locals.version = 1.0;

方式二:

app.locals({title: "Hello World", version: 1.0});

在响应中呈现模板

向客户端发送响应模板有两种方法:

  1. Express app对象发送;
  2. Response对象发送;

1>、通过Express app对象发送

语法格式,如下:

app.render(view,  [locals],  callback);

view: 模板文件名;
[locals]: 一个locals对象(即在app.locals中定义的locals对象)。
callback: 回调函数,在模板呈现后执行。接受两个参数。第一个,err-错误对象。第二个, renderedData——呈现后的模板字符串。

2>、Response对象发送

语法格式,如下:

res.render('模板文件名(无后缀)');

这种方法直接把模板呈现为一个响应,所要呈现的结果在响应中自动发送。

下面,看看下面示例代码:

var express = require('express'),    jade    = require('jade'),    ejs     = require('ejs');var app = express();app.set('views', './views');app.set('view engine', 'jade');app.engine('jade', jade._express);app.engine('html', ejs.renderFile);app.listen( 8080 );app.locals({    uname: 'G',    vehicle: 'Pandora',    terrain: 'Mountains',    climate: 'Desert',    location: 'Unknown'});app.get('/jade', function(req, res) {    res.render('user_jade');});app.get('/ejs', function(req, res) {    app.render('user_ejs.html', function(err, renderedData) {        res.send( renderedData );    });});
1 0
原创粉丝点击