Je développe une application utilisant NextJS et Typescript et j'essaie de déterminer la meilleure façon de saisir correctement les réponses MySQL. Voici le point de terminaison de l'API :
import { hash } from "bcrypt"; import type { NextApiRequest, NextApiResponse } from "next"; import randomstring from "randomstring"; import { executeQuery } from "../../../lib/db"; const Test = async (req: NextApiRequest, res: NextApiResponse) => { // Manage password generation const password = randomstring.generate(16); const hashedPassword = hash(password, 10); // Create new auth using email and password const auth = await executeQuery( "INSERT INTO auth (email, password) VALUES (?, ?)", ["test@test.com", (await hashedPassword).toString()] ); res.statusCode = 200; res.json(auth.insertId); }; export default Test;
Je souhaite taper fortement insertId
via ESLint pour supprimer tous les avertissements et erreurs, mais malheureusement, tous mes efforts ont été infructueux. L'erreur que je reçois est :
Property 'insertId' does not exist on type 'RowDataPacket[] | RowDataPacket[][] | OkPacket | OkPacket[] | ResultSetHeader | { error: unknown; }'. Property 'insertId' does not exist on type 'RowDataPacket[]'.ts(2339)
Ma executeQuery
fonction est définie comme :
import mysql from "mysql2/promise"; export const executeQuery = async (query: string, params: unknown[] = []) => { try { const db = await mysql.createConnection({ host: process.env.MYSQL_HOST, database: process.env.MYSQL_DATABASE, user: process.env.MYSQL_USER, password: process.env.MYSQL_PASSWORD, }); const [results] = await db.execute(query, params); db.end(); return results; } catch (error) { return { error }; } };
L'une de mes tentatives de mise en œuvre est cette réponse SO, mais je n'arrive pas à la faire fonctionner...
Toute aide est grandement appréciée !
J'ai également rencontré le même problème que vous. Après avoir recherché le fichier de type mysql2, j'ai découvert que vous pouvez transmettre le type de résultat de la requête.
Par exemple :
Pour les insertions et les mises à jour, vous pouvez le saisir davantage en utilisant
OkPacket
类型,对于选择,您可以使用RowDataPacket
类型。您可以通过将RowDataPacket
en implémentant le type de réponse attendu pour la requête et en le transmettant à la fonction de requête.Par exemple :
Ensuite, vous pouvez le transmettre comme ceci lors de l'interrogation :
Voici mes 2 cents, j'espère que cela aidera quelqu'un à l'avenir.