Как вызвать функцию, которая возвращает результат запроса mysql, чтобы отправить его обратно в результат Express.js?

Как вызвать функцию, которая возвращает результат запроса 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);
    }
  };
}
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
0
337
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
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)
      })
    });
  }
}

Другие вопросы по теме