Ich entwickle eine Anwendung mit NextJS und Typescript und versuche herauszufinden, wie MySQL-Antworten am besten korrekt eingegeben werden können. Hier ist der API-Endpunkt:
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;
Ich möchte dringend insertId
über ESLint tippen, um alle Warnungen und Fehler zu entfernen, aber leider waren alle meine Bemühungen erfolglos. Die Fehlermeldung, die ich erhalte, ist:
Property 'insertId' does not exist on type 'RowDataPacket[] | RowDataPacket[][] | OkPacket | OkPacket[] | ResultSetHeader | { error: unknown; }'. Property 'insertId' does not exist on type 'RowDataPacket[]'.ts(2339)
Meine executeQuery
Funktion ist definiert als:
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 }; } };
Einer meiner Implementierungsversuche ist diese SO-Antwort, aber ich schaffe es nicht, sie zum Laufen zu bringen...
Jede Hilfe ist uns sehr dankbar!
我也遇到了和你一样的问题,在查找mysql2类型文件后,我发现你可以传递查询的结果类型。
例如:
对于插入和更新,您可以使用
OkPacket
类型,对于选择,您可以使用RowDataPacket
类型。您可以通过将RowDataPacket
实现为查询的预期响应类型并将其传递到查询函数中来进一步键入它。例如:
那么在查询的时候就可以这样传递:
这是我的 2 美分,希望它对将来的人有所帮助。