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')
通常,我可以导出类并以这种方式创建和访问对象,但由于某种原因它在这里不起作用。
以下测试用例完全模拟了OP的设置,没有显示任何问题。
因此,一切都归结为两个问题......
AuthController
实例(不是 AuthService
实例)。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; }