Node.js中util.promisify封装的JWT验证返回Promise,如何提取结果内的id值
解决JWT异步验证中提取id字段的问题
问题根因
当前代码缺失了对异步方法的Promise解析等待步骤:
util.promisify包装后的jwtVerifyAsync是标准的返回Promise的异步方法,你目前的代码直接将方法返回的Promise实例赋值给verify变量,没有等待Promise完成解析就直接打印,因此控制台才会输出包裹着payload的Promise结构,而非payload本身。- 你控制台看到的
Promise { {id: 'xxx', ...} }格式,就是处于fulfilled状态的Promise实例的直接打印效果,promisify的封装逻辑没有错误,只是没有取出Promise内部包裹的实际值。 - 你当前导出的接口处理函数本身已经用
async修饰,天然支持await语法,可以直接通过等待Promise解析拿到真实的验证结果。
修正操作
在调用jwtVerifyAsync的语句前添加await关键字,等待Promise解析完成后,即可直接从返回的payload对象中读取id字段值。
修正后的参考实现:
const jwt = require('jsonwebtoken'); const util = require('util'); const jwtVerifyAsync = util.promisify(jwt.verify); module.exports = async (req, res) => { const token = req.body.body; try { // 补充await等待Promise解析,获取真实的验证结果对象 const verifyResult = await jwtVerifyAsync(token, 'SECRET-TOKEN'); // 直接提取id字段值 const extractedId = verifyResult.id; console.log('提取到的id值:', extractedId); } catch(e) { console.log(e); return e; } };
等价写法参考
如果不使用await语法,也可以通过Promise的.then()回调拿到解析结果,逻辑完全一致:
jwtVerifyAsync(token, 'SECRET-TOKEN') .then(verifyResult => { const extractedId = verifyResult.id; console.log('提取到的id值:', extractedId); }) .catch(e => { console.log(e); });
内容的提问来源于stack exchange,提问作者localdata01
相关产品推荐
相关产品推荐

