6

I'm making a nodeJS web app and I'm using JWT for authentication. All my work is in ES6 modules and I wanted to import JWT in the same way, but apparently it isn't yet supported by the package. I can't use the older require() format as it throws an error since I've set it to modules in my package.json. Is there a way around this or do I have to find another library altogether?

Edit: I have fixed the issue with destructuring but it's still not working. Apparently it can't find the module at all. I made sure the package is in fact installed and updated, still not working

Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'jsonwebtoken' imported from /path/to/file.js

import jwt from ' jsonwebtoken'
const { sign } = jwt

class sampleClass {

   static func(user) {
      return sign(
            {
                _id: user._id,
                name: user.name,
            },
            'sample key',
            {
                expiresIn: '7d',
            },
      )
   }

}
Unknown6003
  • 143
  • 1
  • 1
  • 9
  • did you try to execute your file with the experimental flag `node --experimental-modules app.js` – bill.gates Oct 09 '20 at 07:28
  • No way you cant use es6 import, you doing it wrong. – Talg123 Oct 09 '20 at 07:29
  • Yes, ES6 import functionality is working with all other packages, the issue is with JWT as it does not support ES6 imports, the issue has been raised on github but no solution other than modifying the package manually, which leads to a massive package size. – Unknown6003 Oct 09 '20 at 07:30
  • 1
    Are you kidding me? I just installed jwt and everything is fine. Im not sure what did you try to do, post you code. – Talg123 Oct 09 '20 at 07:32
  • I have updated and getting a new error apparently. – Unknown6003 Oct 09 '20 at 07:52

5 Answers5

9

Your gonna need to import it and then assign it like this

import jwt from 'jsonwebtoken';
const { sign, verify } = jwt;
const token = sign({"d":"dd"}, "secret", {expiresIn: 300})
console.log(token);
const verifycode = verify(token, "secret");
console.log(verifycode);
Talg123
  • 1,468
  • 1
  • 10
  • 15
2

If you are using jwt v8, just import the jsonwebtoken this way:

import * as jwt from 'jsonwebtoken'

or

import { sign, decode, verify } from 'jsonwebtoken'

hkyo89
  • 31
  • 1
2

You have an extra space in import jwt from ' jsonwebtoken'

Should just be import jwt from 'jsonwebtoken'

I just tested it and it works fine on my computer

makerbaker
  • 180
  • 9
1

Could you try something:

  1. Create a folder
  2. Do npm init
  3. Create a file app.js
  4. install json web token npm i jsonwebtoken
  5. Go to package.json and add "type": "module"
  6. write in your app.js this here: import jwt from "jsonwebtoken"
  7. Execute it: node --experimental-modules app.js

Tell me then if you get an error

bill.gates
  • 14,145
  • 3
  • 19
  • 47
0

I am using typescript to write my node server and jwt implementation.

This is the suggestion on my terminal:

Try npm i --save-dev @types/jsonwebtoken if it exists or add a new declaration (.d.ts) file containing `declare module 'jsonwebtoken';

I just typed: npm i --save-dev @types/jsonwebtoken

Then in my file I added imports: import jwt from "jsonwebtoken"

Hope that helps.

Gel
  • 2,866
  • 2
  • 18
  • 25