express中的res.locals和app.locals的使用

本文深入探讨Express框架中res.locals与app.locals的作用及用法,解析它们如何实现页面与路由间的数据传递,以及如何利用它们进行模板变量管理,提高前端数据处理效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

刚入坑express的时候,这个res.locals看的还是比较多的 它是实现了页面和路由之间的传惨
这个页面其实又可以叫做 模板

不同的是 res是针对当前请求的 app.locals是对于整个应用来说的

router.get('/', function(req, res, next) {
	res.locals.name="hello world"
  res.render('index', { title: 'Express' });
});

在模板引擎中 这里使用ejs模板引擎

<h1><%= title %> <%=name %></h1>

确实把hello world 渲染到页面中了
其实可以整合到一起 的 上面的和下面的是等效的

res.render('index', { title: 'Express',name:"hello world" });

在这里插入图片描述
还有一个就是挂载app上的 这个表示全局所有的模板都可以访问到的

app.locals.age=23;
随便找个模板看看

  <h1>年龄是:<%=age %></h1>

也确实吧数据渲染到模板中了额
在这里插入图片描述
工作中经常会把 这些页面中公共的变量部分 使用res.locals 进行抽离 集中管理 方便统一发送给前台模板中

var createError = require('http-errors'); var express = require('express'); var path = require('path'); var cookieParser = require('cookie-parser'); var logger = require('morgan'); var indexRouter = require('./routes/index'); var usersRouter = require('./routes/users'); const UserRouter = require('./routes/admin/UserRouter'); const JWT = require('./util/JWT'); const NewsRouter = require('./routes/admin/NewsRouter'); const webNewsRouter = require('./routes/web/NewsRouter'); const ProductRouter = require('./routes/admin/ProductRouter'); var app = express(); // view engine setup app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'jade'); app.use(logger('dev')); app.use(express.json()); app.use(express.urlencoded({ extended: false })); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); app.use('/', indexRouter); app.use('/users', usersRouter); app.use(webNewsRouter) /* /adminapi/* - 后台系统用的 /webapi/* - 企业官网用的 */ app.use((req, res, next) => { // 如果token有效 ,next() // 如果token过期了, 返回401错误 if (req.url === "/adminapi/user/login") { next() return; } const token = req.headers["authorization"].split(" ")[1] if (token) { var payload = JWT.verify(token) // console.log(payload) if (payload) { const newToken = JWT.generate({ _id: payload._id, username: payload.username }, "1d") res.header("Authorization", newToken) next() } else { res.status(401).send({ errCode: "-1", errorInfo: "token过期" }) } } }) app.use(UserRouter) app.use(NewsRouter) app.use(ProductRouter) // catch 404 and forward to error handler app.use(function (req, res, next) { next(createError(404)); }); // error handler app.use(function (err, req, res, next) { // set locals, only providing error in development res.locals.message = err.message; res.locals.error = req.app.get('env') === 'development' ? err : {}; // render the error page res.status(err.status || 500); res.render('error'); }); module.exports = app;
07-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yunchong_zhao

帮到你了,请作者喝杯矿泉水可好

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值