将模板引擎用于 Express

目录

将模板引擎用于 Express

res.locals

app.set(name, value)

res.render(view [, locals] [, callback])


在 Express 可以呈现模板文件之前,必须设置以下应用程序设置:

  • views:模板文件所在目录。例如:app.set("views", path.join(__dirname, "views"));
  • view engine:要使用的模板引擎。例如:app.set("view engine", "jade");

将模板引擎用于 Express

然后安装对应的模板引擎 npm 包:

$ npm install jade 

与 Express 兼容的模板引擎(例如 jade)导出名为 __express(filePath, options, callback) 的函数,该函数由 res.render() 函数调用以呈现模板代码。 某些模板引擎并不遵循此约定。Consolidate.js 库通过映射所有流行的 Node.js 模板引擎来遵循此约定,因此可以在 Express 内无缝工作。

在设置视图引擎之后,不必指定该引擎或者在应用程序中装入模板引擎模块;Express 在内部装入此模块,如下所示(针对以上示例)。

app.set("view engine", "jade");

在 views 目录中创建名为 layout.jade 的 jade 模板文件,其中包含以下内容:

doctype html
html
  head
    title= title
  body
    block content

在 views 目录中创建名为 error.jade 的 jade 模板文件,其中包含以下内容: 

extends layout

block content
  h1= message
  h2= error.status
  pre #{error.stack}

 

随后创建路由以呈现 error.jade 文件。如果未设置 view engine 属性,必须指定 view 文件的扩展名。否则,可以将其忽略。

//错误拦截器
app.use(function (err, req, res, next) {
  // 设置通信信息开发环境渲染错误信息
  res.locals.message = err.message;
  res.locals.error = req.app.get("env") === "development" ? err : {};

  // 设置状态码
  res.status(err.status || 500);
  //渲染的错误页
  res.render("error");
});

向主页发出请求时,error.jade 文件将呈现为 HTML。

res.locals

使用此属性设置在使用 res.render 渲染的模板中可访问的变量。res.locals 上设置的变量在单个请求-响应周期内可用,并且不会在请求之间共享。

为了保留局部变量以用于请求之间的模板渲染,请改用 app.locals

此属性对于向应用中渲染的模板公开请求级信息(例如请求路径名称、经过身份验证的用户、用户设置等)很有用。

app.use((req, res, next) => {
  // Make `user` and `authenticated` available in templates
  res.locals.user = req.user
  res.locals.authenticated = !req.user.anonymous
  next()
})

app.set(name, value)

将设置 name 分配给 value。你可以存储任何你想要的值,但某些名称可用于配置服务器的行为。这些特殊名称列在 应用设置表 中。

为布尔属性调用 app.set('foo', true) 与调用 app.enable('foo') 相同。同样,为布尔属性调用 app.set('foo', false) 与调用 app.disable('foo') 相同。

使用 app.get() 检索设置的值。

app.set('title', 'My Site')
app.get('title') // "My Site"

res.render(view [, locals] [, callback])

渲染 view 并将渲染的 HTML 字符串发送到客户端。可选参数:

  • locals,一个对象,其属性定义视图的局部变量。

  • callback,回调函数。如果提供,该方法将返回可能的错误和渲染的字符串,但不执行自动响应。当发生错误时,该方法在内部调用 next(err)

view 参数是一个字符串,它是要渲染的视图文件的文件路径。这可以是绝对路径,也可以是相对于 views 设置的路径。如果路径不包含文件扩展名,则 view engine 设置确定文件扩展名。如果路径确实包含文件扩展名,那么 Express 将加载指定模板引擎的模块(通过 require())并使用加载模块的 __express 函数渲染它。

有关详细信息,请参阅 使用 Express 模板引擎

注意:view 参数执行文件系统操作,例如从磁盘读取文件和评估 Node.js 模块,因此出于安全原因不应包含来自终端用户的输入。

局部变量 cache 启用视图缓存。设置为 true,用于在开发过程中缓存视图;默认情况下,在生产环境中启用视图缓存。

// send the rendered view to the client
res.render('index')

// if a callback is specified, the rendered HTML string has to be sent explicitly
res.render('index', (err, html) => {
  res.send(html)
})

// pass a local variable to the view
res.render('user', { name: 'Tobi' }, (err, html) => {
  // ...
})

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值