我想使用Typescript的Error通过TokenExpiredError库的jwt.verify函数检查jsonwebtoken的类型是否为instanceof抛出。

import jwt from "jsonwebtoken";

function someFunction() {
    try {
        return jwt.verify(token, key);
    }catch(err) {
        if(err instanceof TokenExpiredError) {
            return attemptRenewal()
        }
        throw err
    }
}


如何导入符号TokenExpiredError

我找不到有关此重要课程的任何文档,也没有想到的唯一直观内容

import { jwt, TokenExpiredError } from "jsonwebtoken";


使jwtundefined

我知道解决方法,例如与类名进行字符串比较,但是我想产生干净的代码。

我正在使用jsonwebtoken 8.5.1。

最佳答案

jsonwebtoken导出默认对象,例如:source

module.exports = {
  decode: require('./decode'),
  verify: require('./verify'),
  sign: require('./sign'),
  JsonWebTokenError: require('./lib/JsonWebTokenError'),
  NotBeforeError: require('./lib/NotBeforeError'),
  TokenExpiredError: require('./lib/TokenExpiredError'),
};


这意味着,当您使用import jwt from "jsonwebtoken";语法时,jwt会进入具有默认导出所有属性的对象。

您不能使用import { jwt, TokenExpiredError } from "jsonwebtoken";,因为在默认导出对象中,我们没有jwt属性,

如果要导入TokenExpiredError和默认对象,则可以遵循如下语法:import jwt, {TokenExpiredError} from "jsonwebtoken";,然后jwt仍然是默认导出对象,并且具有TokenExpiredError对象(jwt.TokenExpiredErrorTokenExpiredError是相同)。

如果您只想使用verify函数和TokenExpiredError,则导入行将到达:import {TokenExpiredError, verify} from "jsonwebtoken";,那么您的函数将类似于:

import {TokenExpiredError, verify} from "jsonwebtoken";

function someFunction() {
  try {
    return verify(token, key);
  } catch (err) {
    if (err instanceof TokenExpiredError) {
      return attemptRenewal()
    }
    throw err
  }
}

关于javascript - 如何导入jsonwebtoken的verify抛出的TokenExpiredError?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56295433/

10-11 08:20