[NodeJS] Express 模板传值对象app.locals、res.locals

locals是Express应用中 Application(app)对象和Response(res)对象中的属性,该属性是一个对象。该对象的主要作用是,将值传递到所渲染的模板中。

locals对象

locals对象用于将数据传递至所渲染的模板中。

对于如下一个ejs模板:

<!DOCTYPE html>
<html>
  <head>
    <title><%= name %></title>
  </head>
  <body>
    <h1><a href="<%= url %>"><%= name %></a></h1>
    <p><%= introduce %></p>
  </body>
</html>

我们可以像下面这样渲染页面,并向页面传递nameurlintroduce三个变量的值:

router.get('/', function(req, res) {  
  res.render('index', {name:'IT笔录', url:'http://itbilu.com', introduce:'学习、记录、整理'});
  // 也可以使用 res.locals 变量
  // res.locals = {
  //   name:'IT笔录', 
  //   url:'http://itbilu.com', 
  //   introduce:'学习、记录、整理'
  // };
  // res.render('index');
});

渲染后的页面HTML:

<!DOCTYPE html>
<html>
  <head>
    <title><IT笔录></title>
  </head>
  <body>
    <h1><a href="http://itbilu.com">IT笔录</a></h1>
    <p>学习、记录、整理</p>
  </body>
</html>

locals对象会被传递到页面,在模板中可以直接引用该对象的属性,也可以通过该对象引用。如:<%= name %>属性同样可以通过<%= locals.name %>来引用。

app.localsres.locals

locals可能存在于app对象中即:app.locals;也可能存在于res对象中,即:res.locals。两者都会将该对象传递至所渲染的页面中。不同的是,app.locals会在整个生命周期中起作用;而res.locals只会有当前请求中起作用。由于app.locals在当前应用所有的渲染模中访问,这样我们就可以在该对象中定义一些顶级/全局的数据,并在渲染模板中使用。

在中间件中使用

我们常利用Expres的中间件将复杂的问题拆解成多个简单的问题,实现复杂的问题简单化。locals对象中样也可以应用中间件路由中间件中引用,该对象和appreqres一样可以依次传递,添加或修改其属性值后,会在后面的处理中体现出来。

如,在app中使用locals

var app = express();
app.locals.name = '这是一个APP'; // 定义可以应用整个生命周期中使用的变量
app.use(function(req, res, next) {
  app.locals.name = '新名称'; // 修改
  res.locals.url = 'http://itbilu.com'
  next(err);
});

在路由中间件中使用locals

router.get('/', urlAndIntroduce, function(req, res) {  
  res.render('index', {name:'IT笔录'});
});

function urlAndIntroduce(req, res, next) {
  res.locals = { url:'http://itbilu.com', introduce:'学习、记录、整理'};
}

附加

jade 中使用 moment、marked 等插件

app.js 中加上

app.locals.moment = require('moment');
app.locals.marked = require('marked');

index.jade就可以这样使用了

p #{moment(time).format('LLLL')}
.markdown-body
  != marked(content)

转载自: Express 模板传值对象app.locals、res.locals —— http://itbilu.com/nodejs/npm/Ny0k0TKP-.html 稍作修改

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Node.js中,`app.use`是Express框架中的一个,用于将中间件函数绑定到应用程序的请求处理管道上。 中间件函数是在请求和响应之间执行的函数,它可以访问请求对象(`req`)、响应对象(`res`)和应用程序的下一个中间件函数(`next`)。通过使用`app.use`方法,我们可以将一个或多个中间件函数添加到应用程序的请求处理管道中。 `app.use`方法的语法如下: ```javascript app.use([path], middlewareFunction) ``` 其中,`path`是可选参数,用于指定中间件函数的路径。如果省略了`path`参数,中间件函数将被绑定到所有的请求上。`middlewareFunction`是要绑定的中间件函数。 下面是一个示例,展示了如何使用`app.use`方法添加一个简单的中间件函数: ```javascript const express = require('express'); const app = express(); // 中间件函数 const logger = (req, res, next) => { console.log('Request received:', req.method, req.url); next(); }; // 将中间件函数绑定到应用程序的请求处理管道上 app.use(logger); // 处理路由 app.get('/', (req, res) => { res.send('Hello World!'); }); // 启动服务器 app.listen(3000, () => { console.log('Server started on port 3000'); }); ``` 在上面的示例中,我们定义了一个名为`logger`的中间件函数,它会在每个请求到达时打印请求的方法和URL。然后,我们使用`app.use`方法将该中间件函数绑定到应用程序的请求处理管道上。最后,我们定义了一个处理根路由的路由处理函数,并启动了服务器。 通过使用`app.use`方法,我们可以在应用程序中添加多个中间件函数,并按照它们添加的顺序依次执行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值