如何在Express.js中自动为res.send()返回值追加loggedin键值对?
实现接口返回结果自动添加loggedin字段的方案
最简洁高效的方式是用Express的自定义中间件,拦截响应发送逻辑,自动给返回数据追加loggedin字段,不用逐个修改路由代码。
步骤1:编写自定义中间件
这个中间件会包装res.send方法,在发送响应前自动处理数据:
// 自定义中间件:自动为响应添加loggedin字段 const addLoggedInField = (req, res, next) => { // 保存原始的res.send方法 const originalSend = res.send; res.send = function(data) { // 替换成你项目中实际的登录判断逻辑 // 示例:从session/token校验用户是否登录,这里暂时设为true const isLoggedIn = true; let responseData; // 处理不同类型的返回数据 if (typeof data === 'object' && data !== null) { // 直接给对象追加字段 responseData = { ...data, loggedin: isLoggedIn }; } else if (typeof data === 'string') { // 如果是JSON字符串,解析后追加字段再转回去 try { responseData = JSON.parse(data); responseData.loggedin = isLoggedIn; responseData = JSON.stringify(responseData); } catch (err) { // 非JSON字符串直接返回原数据 responseData = data; } } else { // 其他类型(数字、布尔等)直接返回原数据 responseData = data; } // 调用原始send方法返回处理后的数据 return originalSend.call(this, responseData); }; next(); };
步骤2:应用中间件
可以选择全局应用(给所有接口加),或者给指定路由应用:
export const indexRouter = express.Router(); // 给当前路由的所有接口应用中间件 indexRouter.use(addLoggedInField); indexRouter.get('/', (_, res) => { res.setHeader('Access-Control-Allow-Origin', '*'); res.send({ message: 'HI' }); });
补充说明
- 如果你的项目常用
res.json返回数据,只需把中间件里的res.send换成res.json,逻辑完全一致。 isLoggedIn的判断逻辑要替换成你项目的实际校验方式,比如从req.session.user、req.headers.authorization(token)等判断用户是否已登录。
内容的提问来源于stack exchange,提问作者Tobin Palmer
相关产品推荐
相关产品推荐

