Как вызвать функцию, которая возвращает результат запроса MySQL, чтобы отправить его обратно в результат Express.js?
Я пытаюсь экспортировать некоторые из моих sql-запросов в отдельные функции, чтобы очистить и удалить повторяющийся код. Я пытаюсь использовать асинхронную функцию ожидания, но это не сработало.
Насколько чистый этот код? Спасибо
import { Request, Response } from 'express'
import { mysqlConnection } from '../config/mysql.config'
import { users } from '../models/users.models'
export class AuthController {
constructor() { }
// I want to avoid this embedded callbacks function
public signin(req: Request, res: Response) {
var user: users = req.body
var insUser = [
user.userEmail,
user.userFirstName,
user.userLastName,
user.userEmail,
//hash password
// user.userPassword
]
mysqlConnection.pool.getConnection((err, connection) => {
connection.query('SELECT * FROM tblusers where userEmail = ? OR userUserName = ?', [user.userEmail, user.userUsername], (err, row: users[]) => {
if (err) throw err;
if (row.length) {
return res.status(400).json({ errors: { msg: "user exist already", status: 'signin-error' } })
}
//addUserInDB
connection.query('INSERT INTO tblusers (userUserName, userFirstName, userLastName, userEmail, userPassword) VALUES (? ,?, ?, ?, ?)', insUser, (err, row) => {
if (err) throw err;
//get userFormDB
connection.query('SELECT userId, userUsername, userFirstName, userLastName, userEmail, userPassword, webrName FROM tblusers INNER JOIN tblweblroles ON tblusers.tblWeblroles_webrId = tblweblroles.webrId where userEmail = ?', [user.userEmail], (err, row: users[], fields) => {
if (err) throw err
connection.release();
var firstUser = row[0]
var user = {
userId: firstUser.userId,
userUsername: firstUser.userUsername,
userFirstName: firstUser.userFirstName,
userLastName: firstUser.userLastName,
userEmail: firstUser.userEmail,
userUpdateAt: firstUser.userUpdateAt,
userCreatedAt: firstUser.userCreatedAt,
webrName: firstUser.webrName
}
res.status(200).json(user);
})
})
})
})
}
//test
private getUsers() {
console.info('test')
mysqlConnection.pool.query('SELECT * FROM webapp.tblusers;', (err: any, row: any) => {
if (err) throw err
console.info('row: ' + row)
return row
})
}
public async login(req: Request, res: Response) {
console.info('test1')
try {
var users = await this.getUsers()
console.info('users:' + users)
res.json(users);
} catch (error) {
res.json(error);
}
};
}
export class AuthController {
constructor() {
}
public async login(req: Request, res: Response) {
var users: any = await AuthController.getUsers()
res.json(users)
};
public static getUsers(): Promise<any> {
console.info('test')
return new Promise(resolve => {
mysqlConnection.pool.query('SELECT * FROM webapp.tblusers;', (err: any, row: any) => {
if (err) throw err
resolve(row)
})
});
}
}