在Express中使用模板引擎

本文介绍了如何在Express应用中配置和使用模板引擎,包括定义模板引擎的扩展名,注册引擎回调,添加本地对象到app.locals,以及通过Express app对象和Response对象两种方式在响应中呈现模板。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义模板引擎

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 );
    });
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值