I have a problem in Nodejs but I dont't know why this error happening
in config folder I have a file with name generateToken.js and this file have this code:
const jwt = require('jsonwebtoken');
exports.generateActiveToken = async (payload) => {
return jwt.sign(payload, `${process.env.ACTIVE_TOKEN_SECRET}`, { expiresIn: '5m' })
}
exports.generateAccessToken = (payload) => {
return jwt.sign(payload, `${process.env.ACCESS_TOKEN_SECRET}`, { expiresIn: '15m' })
}
exports.generateRefreshToken = (payload) => {
return jwt.sign(payload, `${process.env.REFRESH_TOKEN_SECRET}`, { expiresIn: '30d' })
}
And this error happen in my controller that name is AuthController and this controller I have a function with name register and export that for using in my main file : app.js
this is my RegisterController code:
exports.register = async (req, res) => {
try {
const { name, account, password } = req.body;
const user = await Users.findOne({ account });
console.log(user);
if (user){
return res.status(400).json({ msg: "email ya mobile ghablan ozv bod" });
}
const passwordHash = await bcrypt.hash(password, 12);
const newUser = { name, account, password: passwordHash };
const active_token = generateActiveToken({newUser});
const url = `${CLIENT_URL}/active/${active_token}`
if(validateEmail(account)){
sendMail(account, url, "فعال سازی اکانت")
return res.json({ msg: "lotfan email khod ra check konid" })
}
} catch (err) {
// return res.status(500).json({ msg: "be shokhm raft" });
console.log(err);
}
}
in console show this error:
TypeError: generateActiveToken is not a function
at exports.register (C:\Projects\ProjectName\controllers\authController.js:24:28)
How I can slow this error?
CodePudding user response:
First of all, generateActiveToken is a async function so put an await before function call.
The proper way to export a module is like below:
const jwt = require('jsonwebtoken');
module.exports.generateActiveToken = async (payload) => {
return jwt.sign(payload, `${process.env.ACTIVE_TOKEN_SECRET}`, { expiresIn: '5m' })
}
module.exports.generateAccessToken = (payload) => {
return jwt.sign(payload, `${process.env.ACCESS_TOKEN_SECRET}`, { expiresIn: '15m' })
}
module.exports.generateRefreshToken = (payload) => {
return jwt.sign(payload, `${process.env.REFRESH_TOKEN_SECRET}`, { expiresIn: '30d' })
}
Or:
const jwt = require('jsonwebtoken');
function generateActiveToken = async (payload) => {
return jwt.sign(payload, `${process.env.ACTIVE_TOKEN_SECRET}`, { expiresIn: '5m' })
}
function generateAccessToken = (payload) => {
return jwt.sign(payload, `${process.env.ACCESS_TOKEN_SECRET}`, { expiresIn: '15m' })
}
function generateRefreshToken = (payload) => {
return jwt.sign(payload, `${process.env.REFRESH_TOKEN_SECRET}`, { expiresIn: '30d' })
}
module.exports = {generateActiveToken, generateAccessToken, generateRefreshToken}
Or:
const jwt = require('jsonwebtoken');
module.exports = {
async generateActiveToken(payload) {
return jwt.sign(payload, `${process.env.ACTIVE_TOKEN_SECRET}`, { expiresIn: '5m' })
},
generateAccessToken(payload) {
return jwt.sign(payload, `${process.env.ACCESS_TOKEN_SECRET}`, { expiresIn: '15m' })
},
generateRefreshToken(payload) {
return jwt.sign(payload, `${process.env.REFRESH_TOKEN_SECRET}`, { expiresIn: '30d' })
}
}
And require it like below:
const {generateActiveToken} = require("./your-path-to-file");
