1. 模板引擎
- 为了使 art-template模板引擎能够更好地和Express框架配合,模板引擎在原art-template模板引擎的基础上封装了
express-art-template
安装
使用 npm install art-template express-art-template
命令进行安装
配置
// 配置使用 art-template 模板引擎
// 第一个参数表示: 当渲染以 .art 结尾的文件的时候,使用 art-template 模板引擎
// express-art-template 是专门用来在 Express 中把art-template 整合到 Express中的
// 虽然我们这里不需要加载 art-template ,但是也必须安装
// 原因就在于 express-art-template 依赖了 art-template
app.engine('art', require('express-art-template'));
使用
1.基础使用:
// Express 为 response 相应对象提供了一个方法:render
// render 方法默认是不可以用的,但是如果配置了模板引擎,就可以使用了
// res.render('html模板名',{模板数据})
// 第一个参数不能写路径,默认会去项目中的views目录查找该模板文件
// 也就是说 Express 有一个约定: 开发人员把所有的视图文件都放到views 目录中
// 如果想要修改默认的views 目录,则可以:app.set('views',render 函数的默认路径)
// 但是需要注意:这样的话,要把404.html 改成 404.art,并且文件名也要改
app.get('/', function(req, res) {
res.render('404.art')
})
2.修改默认路径:
ps:两个app.set语句的第一个参数 views 和 view engin 都是固定的,是模板内部规定好的
3.如果不喜欢用art,或者有些编辑器识别不了,可以使用以下方法:
app.engine('html', require('express-art-template'));
app.get('/', function(req, res) {
res.render('404.html')
})
补充:在express 中重定向的 API : res.redirect(’/’)
2. app.locals对象
关于渲染模板数据,在真实的开发中,有这样一种场景,在不同的页面中总会有一些公共区域,公共区域所要展示的数据都是一样的,在代码当中要如何查询这个公共数据呢?
最直接的做法就是在不同的页面路由中都去查询这个数据,然后再通过render方法填充到模板中,但这样做会产生非常多的冗余代码。
有没有一种办法,让查询公共数据的代码只写一次,然后在所有需要用到这个数据的模板中都可以拿到这个数据。
在app服务器对象下面有一个locals对象,我们可以将公共数据作为locals下面的属性。locals下面的数据在所有的模板中都可以直接获取到。
使用
将变量设置到 app.locals
对象下面,这个数据在所有的模板中都可以获取到。