app.locals 和 res.locals 生命周期

编程代码

1个回答

写回答

Co1a

2025-07-09 14:49

+ 关注

Java
Java

app.locals 和 res.locals 是在 Express 框架中用于传递变量和数据的两个对象。它们的生命周期与 Express 应用的生命周期相同,即从应用启动到关闭。在本文中,我们将探讨这两个对象的作用和使用场景,并提供一些案例代码来加深理解。

app.locals 的作用和使用

app.locals 是一个全局对象,用于存储在整个应用程序中可供所有模板访问的数据。可以将它看作是一个全局的数据存储对象。在应用启动时,我们可以向 app.locals 添加一些初始数据,这些数据将在整个应用的生命周期中保持不变。

例如,假设我们有一个博客应用,需要在每个页面上显示当前用户的用户名。我们可以在应用启动时,将用户名保存到 app.locals 对象中:

Javascript

app.locals.currentUser = "John Doe";

然后,在模板中可以直接使用 app.locals.currentUser 来获取当前用户的用户名:

html

Welcome, <%= currentUser %>

res.locals 的作用和使用

res.locals 是一个用于存储在当前请求中可供该请求处理过程中的所有中间件和路由访问的数据的对象。它的作用类似于 app.locals,但是它的作用范围仅限于当前请求。

一个常见的用例是在中间件中使用 res.locals 来传递数据给路由处理函数。例如,我们有一个需要验证用户身份的中间件,它会将当前用户的信息存储在 res.locals 对象中,然后将请求继续传递给路由处理函数:

Javascript

app.use((req, res, next) => {

// 验证用户身份

const currentUser = authenticateUser(req);

// 将当前用户信息存储在 res.locals

res.locals.currentUser = currentUser;

// 继续请求处理

next();

});

app.get("/dashboard", (req, res) => {

// 可以在这里获取 res.locals.currentUser

const currentUser = res.locals.currentUser;

res.render("dashboard", { currentUser });

});

在上述示例中,中间件会在每个请求中验证用户身份,并将当前用户信息存储在 res.locals.currentUser 中。然后,在路由处理函数中,我们可以直接从 res.locals.currentUser 获取当前用户信息,并将其传递给模板进行渲染。

案例代码

下面是一个更完整的案例代码,展示了如何使用 app.locals 和 res.locals 来传递数据和变量:

Javascript

const express = require("express");

const app = express();

// 在 app.locals 中存储全局数据

app.locals.currentUser = "John Doe";

// 中间件使用 res.locals 传递数据给路由处理函数

app.use((req, res, next) => {

// 验证用户身份

const currentUser = authenticateUser(req);

// 将当前用户信息存储在 res.locals

res.locals.currentUser = currentUser;

// 继续请求处理

next();

});

app.get("/", (req, res) => {

// 可以在这里获取 app.locals.currentUser

const appCurrentUser = app.locals.currentUser;

// 可以在这里获取 res.locals.currentUser

const resCurrentUser = res.locals.currentUser;

res.render("index", { appCurrentUser, resCurrentUser });

});

app.listen(3000, () => {

console.log("Server is running on port 3000");

});

在上述代码中,我们在 app.locals 中存储了一个全局的当前用户信息,并在中间件中使用 res.locals 将当前用户信息传递给路由处理函数。然后,在路由处理函数中,我们可以分别从 app.locals.currentUser 和 res.locals.currentUser 中获取当前用户信息,并将其传递给模板进行渲染。

通过使用 app.locals 和 res.locals,我们可以在 Express 应用中传递数据和变量,使其在全局范围或当前请求范围内可用。app.locals 适用于整个应用程序的数据存储,而 res.locals 适用于当前请求的数据传递。了解和正确使用这两个对象将提高我们在 Express 中处理数据和变量的效率和灵活性。

举报有用(4)分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号