You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.24 16:36:02