在Express.js中,app.locals
对象承担着存储应用级别变量的重要角色。这些变量在整个应用的生命周期内都是可持续存在的。下面,我将详细解释它的作用和一些使用场景。
作用
-
全局变量存储:
app.locals
提供一个中心位置,用于存储整个应用程序范围内的数据。比如配置信息、环境变量或任何应用需要的全局数据。 -
简化数据传递:在渲染视图时,通过
app.locals
存储的变量可以自动对所有视图可用,无需在每个路由或中间件中单独传递这些数据。 -
提高性能:由于数据只需在应用启动时加载一次,就可以在各个部分重复使用,这可以减少数据库查询或外部API调用的次数,从而提高应用的性能。
示例
存储和使用配置数据
假设我们的应用需要访问一些配置数据,如应用标题或API密钥,我们可以在初始化应用时将这些数据存储在 app.locals
中:
javascriptconst 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作为模板引擎:
javascriptapp.set('view engine', 'pug'); app.get('/dashboard', (req, res) => { // 不需要显式传递title res.render('dashboard'); });
在 dashboard.pug
模板文件中,可以直接使用变量:
pugdoctype html html head title= title // title来自app.locals body h1 欢迎来到#{title}
这种方式使得在整个应用中共享和重用数据变得异常简便和高效。
2024年7月21日 20:51 回复