我无法在JS中输入另一个类中的方法

问题描述 投票:0回答:1
import client from '../database.js';
import Helper from '../util/helper.js';

export default class AuthService {
    helper = new Helper();
    /**
     *
     * @param {string} email
     * @param {string} password
     * @returns {Promise<object>}
     */
    async login(email, password) {
        const hashPassword = this.helper.generateHashPassword(password);
        const text = `SELECT * FROM users WHERE email = $1 and password = $2`;
        const result = await client.query(text, [email, hashPassword]);
        if (result.rows.length === 0) {
            throw new Error('User not found!');
        }
        const userInformation = result.rows[0];
        const payload = {
            id: userInformation.id,
            email: userInformation.email,
        };
        const accessToken = this.helper.generateAccessToken(payload);
        const refreshToken = this.helper.generateRefreshToken(payload);
        return { access_token: accessToken, refresh_token: refreshToken };
    }

    deneme(){
        console.log("DENEME");
    }
}
import AuthService from "../service/auth-service.js";

export default class AuthController {
    authService = new AuthService();
    /**
     *
     * @param {*} req
     * @param {*} res
     */
    async login(req, res) {
        try {
            const { email, password } = req.body;
            const result = await this.authService.login(email, password);
            res.cookie('access_token', result.access_token, {
                httpOnly: true,
            });
            res.cookie('refresh_token', result.refresh_token, {
                httpOnly: true,
            });
            res.status(200).json({ message: 'Login has successful.' });
        } catch (error) {
            console.log(error);
            res.status(500).json('Internal Server Error!');
        }
    }

}

我无法访问登录方法或 authservice 中的任何方法,并且收到此错误:

TypeError: Cannot read properties of undefined (reading 'authService')

通常,我可以导出类并以这种方式创建和访问对象,但由于某种原因它在这里不起作用。

javascript node.js oop
1个回答
-1
投票

以下测试用例完全模拟了OP的设置,没有显示任何问题。

因此,一切都归结为两个问题......

  • OP 实际上如何创建
    AuthController
    实例(不是
    AuthService
    实例)。
  • OP 如何在
    login
    实例中调用
    AuthController

class Helper {
  generateHashPassword(password) {
    console.log('Helper::generateHashPassword::', { password });

    return crypto.randomUUID();
  }
}

class AuthService {
  helper = new Helper;

  async login(email, password) {
    console.log('AuthService::login::', { email, password });

    const hashPassword = this.helper.generateHashPassword(password);
    
    return new Promise(resolve =>
      setTimeout(resolve, 2000, hashPassword)
    );
  }
}
class AuthController {
  authService = new AuthService;

  async login(req/*, res*/) {
    try {
      console.log('AuthController::login::', { req });

      const { email, password } = req.body;
      const result = await this.authService.login(email, password);

      console.log('AuthController::login::', { result });

    } catch (error) {

    }
  }
}


(() => {
  const authController = new AuthController;

  authController.login({
    body: {
      email: '[email protected]',
      password: 'jonny123',
    }
  });
})()
.as-console-wrapper { min-height: 100%!important; top: 0; }

© www.soinside.com 2019 - 2024. All rights reserved.