【问题标题】:SyntaxError: Identifier 'createToken' has already been declaredSyntaxError:标识符“createToken”已被声明
【发布时间】:2022-02-15 23:50:06
【问题描述】:

您好,我正在创建登录服务器,但出现错误声明时出现错误。 const createToken 我能做什么 我怎样才能更改该代码?有什么问题,如何解决,为什么?能解释一下吗,非常感谢

isRefresh.js

    const jwt = require("jsonwebtoken");
    const { createToken } = require("../utils/jwt");

    const db = require("../database/db");

    const createToken = (payload) => {
    console.log("createToken");
    const token = jwt.sign({ username: payload.toString() }, secretKey, {
    algorithm: "sha256",
    expiresIn: "30m",
    });
    return token;
    };

    module.exports = async (req, res, next) => {
    try {
    const refreshtoken = req.get("r_x_auth");

    if (!refreshtoken) {
      return false;
    }

    const decodedToken = jwt.verify(refreshtoken, R_secretKey);
    const data = [decodedToken.username];

    const sql = "select * from member where user_id = ?";

    const conn = await db.getConnection();
    const [rows] = await conn.query(sql, data);
    if (rows) {
      const newtoken = createToken(rows[0].username);
      res.send(newtoken);
    } else {
      return false;
    }
  } catch (err) {
    next(err);
  }
};

jwt.js

 const jwt = require("jsonwebtoken");

const { ACCESS_KEY, REFRESH_KEY } = process.env;

const createToken = (payload) => {
  const token = jwt.sign({ username: payload.toString() }, ACCESS_KEY, {
    algorithm: "sha256",
    expiresIn: "30m",
  });
  return token;
};

const creatRefreshToken = (payload) => {
  const retoken = jwt.sign({ username: payload.toString() }, REFRESH_KEY, {
    algorithm: "sha256",
    expiresIn: "1d",
  });
  return retoken;
};

module.exports = { createToken, creatRefreshToken };

isAuth.js

    const jwt = require("jsonwebtoken");
require("dotenv").config();
const secretKey = process.env.ACCESS_KEY;
const db = require("../database/db");

module.exports = async (req, res, next) => {
  try {
    const token = req.get("x_auth");
    const decodedToken = jwt.verify(token, secretKey);
    const { username } = decodedToken;
    const data = [username];
    const sql = "select * from member where username = ?";
    const conn = await db.getConnection();
    const [rows] = await conn.query(sql, data);
    if (!rows) {
      return false;
    }
    next();
  } catch (err) {
    next(err);
  }
};

controller.js

    const jwt = require("jsonwebtoken");
require("dotenv").config();
const secretKey = process.env.ACCESS_KEY;
const db = require("../database/db");

module.exports = async (req, res, next) => {
  try {
    const token = req.get("x_auth");
    const decodedToken = jwt.verify(token, secretKey);
    const { username } = decodedToken;
    const data = [username];
    const sql = "select * from member where username = ?";
    const conn = await db.getConnection();
    const [rows] = await conn.query(sql, data);
    if (!rows) {
      return false;
    }
    next();
  } catch (err) {
    next(err);
  }
};

请大家帮忙谢谢! 请帮帮我 我一无所知救我

【问题讨论】:

    标签: node.js express


    【解决方案1】:

    错误消息应该是干净的:您在同一模块级别上定义了两次createToken

    重命名其中一个,例如:

    const createTokenJWT = require("../utils/jwt").createToken;
    

    【讨论】:

    • 如果我这样做了,就会得到另一个错误错误:Route.post() 需要一个回调函数,但在 Route 获得了一个 [object Undefined]
    • @s._s_1 确保您正确重命名了所有 createTokenJWT 用法。我相信您将错误的变量传递给路由器。
    • 我不知道。你能详细告诉我吗?谢谢。
    【解决方案2】:

    你声明createToken 两次:

    const { createToken } = require("../utils/jwt");
    

    这里:

    const createToken = (payload) => {
        console.log("createToken");
        const token = jwt.sign({ username: payload.toString() }, secretKey, {
            algorithm: "sha256",
            expiresIn: "30m",
        });
        return token;
    };
    

    【讨论】:

      猜你喜欢
      • 2021-03-28
      • 1970-01-01
      • 2021-10-25
      • 2021-11-18
      • 2021-09-29
      • 1970-01-01
      • 2018-07-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多