乐闻世界logo
搜索文章和话题

Express . Js 中 app . Locals 对象的作用是什么?

4 个月前提问
4 个月前修改
浏览次数31

1个答案

1

在Express.js中,app.locals 对象承担着存储应用级别变量的重要角色。这些变量在整个应用的生命周期内都是可持续存在的。下面,我将详细解释它的作用和一些使用场景。

作用

  1. 全局变量存储app.locals 提供一个中心位置,用于存储整个应用程序范围内的数据。比如配置信息、环境变量或任何应用需要的全局数据。

  2. 简化数据传递:在渲染视图时,通过 app.locals 存储的变量可以自动对所有视图可用,无需在每个路由或中间件中单独传递这些数据。

  3. 提高性能:由于数据只需在应用启动时加载一次,就可以在各个部分重复使用,这可以减少数据库查询或外部API调用的次数,从而提高应用的性能。

示例

存储和使用配置数据

假设我们的应用需要访问一些配置数据,如应用标题或API密钥,我们可以在初始化应用时将这些数据存储在 app.locals 中:

javascript
const express = require('express'); const app = express(); app.locals.title = '我的应用'; app.locals.email = 'support@myapp.com'; app.locals.apiKey = 'abcdef123456'; app.get('/', (req, res) => { res.send(`欢迎来到${app.locals.title}`); }); app.listen(3000, () => { console.log(`${app.locals.title} 正在端口3000上运行`); });

在上面的代码中,我们设置了应用的标题、支持电子邮件和API密钥,并在一个路由和监听服务器时使用了它们。这样,我们就不需要在每个需要这些数据的地方重复定义它们,提高了代码的可维护性。

在视图中使用

如果使用模板引擎,app.locals 中的变量可以直接在视图模板中使用,无需每次渲染时都显式传递。假设我们使用Pug作为模板引擎:

javascript
app.set('view engine', 'pug'); app.get('/dashboard', (req, res) => { // 不需要显式传递title res.render('dashboard'); });

dashboard.pug 模板文件中,可以直接使用变量:

pug
doctype html html head title= title // title来自app.locals body h1 欢迎来到#{title}

这种方式使得在整个应用中共享和重用数据变得异常简便和高效。

2024年7月21日 20:51 回复

你的答案