mysql - node mysql2 kan inte komma åt uppdateringsresultat


Jag gör en enkel UPDATE med mysql2 :

   UPDATE table1
    SET table1.value1 = ?, table1.value2 = ? 
    WHERE user_id = (
      SELECT user_id 
      FROM user
      WHERE company_id = ?
    ) 

table1 är kopplat till användartabellen via user_id, men jag har bara company_id så jag gör en underfråga (det borde förmodligen vara en join, men det är en annan diskussion):

const [results, buff] = await connection.execute(query, values);
return results

Men när man öppnar resultaten för att säkerställa att det inte finns några fel och att endast en rad uppdateras, returnerar results:

  console.log
    ResultSetHeader {
      fieldCount: 0,
      affectedRows: 1,
      insertId: 0,
      info: 'Rows matched: 1  Changed: 0  Warnings: 0',
      serverStatus: 2,
      warningStatus: 0,
      changedRows: 0
    }

Men jag kan inte komma åt värdena. Om jag försöker results.affectedRows får jag

Property 'affectedRows' does not exist on type 'RowDataPacket[] | RowDataPacket[][] | OkPacket | OkPacket[]'.

Det enda sättet att få det att fungera är att göra results['affectedRows']. Några förslag?

Svar #1

Så jag glömde att nämna att detta är ett TypeScript-fel, och jag kunde fixa det genom att göra:

const [results, buff] = await connection.execute(query, values);
const json: any = results;
return json.affectedRows //or whatever property I want

Detta fungerar också:

const [results, buff] = await connection.execute(query, values);
return results as any; //then in the calling fuction access the properties I want

Svar #2

försök kanske på detta sätt:

let result = await db.execute($sql, values);

result = JSON.parse(JSON.stringify(result));

console.log(result)

utdata kommer att vara :

{
  fieldCount: 0,
  affectedRows: 1,
  insertId: 0,
  info: 'Rows matched: 1  Changed: 1  Warnings: 0',
  serverStatus: 2,
  warningStatus: 0,
  changedRows: 1
}

på detta sätt gör det på något sätt till ett normalt objekt som kan nås

så att objektet kan nås som result.affectedRows, result.insertId, ...

Relaterade artiklar