Azure Mobile Apps Node.js应用:Easy Table读取操作添加前置中间件疑问
解决Azure Mobile Apps Easy Table前置中间件赋值userId的问题
看起来你在给Easy Table的读取操作加前置中间件时遇到了小问题,其实核心是要搞清楚Azure Mobile Apps里Easy Table中间件的正确绑定方式,下面给你两种可行的解决方案:
方案1:给read操作单独绑定中间件
这种方式最直接,只针对读取操作生效,不会影响其他表操作:
// 先添加read操作的前置中间件,一定要放在table.read业务逻辑之前 table.read.use((req, res, next) => { req.userId = "1234"; // 这里可以替换成真实的用户ID获取逻辑,比如从解析token得到 next(); // 一定要调用next()才能进入后续的read逻辑 }); // 你的读取业务逻辑 table.read(function (context) { context.query.where({ _user_id: context.req.userId }); return context.execute(); });
方案2:全局绑定指定操作类型的中间件
如果后续需要给多个操作(比如read、insert)都加相同的userId赋值逻辑,可以用这种方式:
// 绑定到read操作的中间件,也可以传数组指定多个操作:{ operation: ['read', 'insert'] } table.use((req, res, next) => { req.userId = "1234"; next(); }, { operation: 'read' }); // 你的读取业务逻辑 table.read(function (context) { context.query.where({ _user_id: context.req.userId }); return context.execute(); });
额外提示
- 中间件的添加顺序很重要,必须放在对应的table操作(比如table.read)之前定义,否则不会触发
- 如果要获取真实用户ID,通常是从请求头的授权token里解析,举个简单示例:
const jwt = require('jsonwebtoken'); // 需先npm安装jsonwebtoken table.read.use((req, res, next) => { const authToken = req.headers.authorization?.split(' ')[1]; if (authToken) { try { const decodedToken = jwt.verify(authToken, '你的JWT密钥'); req.userId = decodedToken.userId; // 假设token里存了userId字段 } catch (err) { return res.status(401).send('无效的授权token'); } } next(); });
内容的提问来源于stack exchange,提问作者TKoL
相关产品推荐
相关产品推荐

