[Node.js] Provide req.locals data though middleware
We can create Template Helpers, which can contains some common reuseable data and libs.
/* This is a file of data and helper functions that we can expose and use in our templating function */ // FS is a built in module to node that let's us read files from the system we're running on const fs = require('fs'); // moment.js is a handy library for displaying dates. We need this in our templates to display things like "Posted 5 minutes ago" exports.moment = require('moment'); // Dump is a handy debugging function we can use to sort of "console.log" our data exports.dump = (obj) => JSON.stringify(obj, null, 2); // Making a static map is really long - this is a handy helper function to make one exports.staticMap = ([lng, lat]) => `https://maps.googleapis.com/maps/api/staticmap?center=${lat},${lng}&zoom=14&size=800x150&key=${process.env.MAP_KEY}&markers=${lat},${lng}&scale=2`; // inserting an SVG exports.icon = (name) => fs.readFileSync(`./public/images/icons/${name}.svg`); // Some details about the site exports.siteName = `Now That's Delicious!`; exports.menu = [ { slug: '/stores', title: 'Stores', icon: 'store', }, { slug: '/tags', title: 'Tags', icon: 'tag', }, { slug: '/top', title: 'Top', icon: 'top', }, { slug: '/add', title: 'Add', icon: 'add', }, { slug: '/map', title: 'Map', icon: 'map', }, ];
Then you can define a locals data in middleware:
Require helper file:
const helpers = require('./helpers');
// pass variables to our templates + all requests app.use((req, res, next) => { res.locals.hlp = helpers; res.locals.flashes = req.flash(); res.locals.user = req.user || null; res.locals.currentPath = req.path; next(); });
Then in the pug file, you can use those locals variable:
extends layout
block content
h2 Sale ends in #{hlp.moment().endOf('day').fromNow()}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2016-06-12 [Angular 2] DI in Angular 2 - 1