Search code examples
node.jsresponsesql-insertmysql2

How can I see the result of MySQL "INSERT" operation in NodeJS?


I am creating a new user using the following code:

  static async create(user: IUser) : Promise<IUser | undefined> {
    const rows: any = await Pools.execute(
      "INSERT INTO users (email, password, username , admin) VALUES(?,?,?,?)",
      [user.email, user.password, user.username, user.admin]);
    try {
      console.log('created user' , rows[0]);

      if (!rows[0] || !rows[0].length)
        return;
      return;

    } catch (err) {
      throw err;
    }
  }

But the result for console.log('created user' , rows[0]); is:

created user ResultSetHeader {
  fieldCount: 0,
  affectedRows: 1,
  insertId: 17,
  info: '',
  serverStatus: 2,
  warningStatus: 0
}

Also when I call the function like const createduser = await Users.create(user); the result still is like:

createduser undefined

How can I get the result of new created user back as an IUser object?


Solution

  • I found that it seems there is no way to get new created user at a one shot and I should add another query afterwards and change the code like below:

      static async create(user: IUser){
        const rows: any = await Pools.execute(
          "INSERT INTO users (email, password, username , admin) VALUES(?,?,?,?)",
          [user.email, user.password, user.username, user.admin]);
          const newUser: any = await Pools.execute("SELECT * FROM users WHERE email = ?", [user.email]);
        try {
          if (!newUser[0] || !newUser[0].length)
            return;
          return newUser[0][0];
    
        } catch (err) {
          throw err;
        }
      }