我正在开发一个使用NextJS和类型记录的应用程序,并试图确定正确键入MySQL响应的最佳方法。下面是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;
我希望强烈键入insertId
以通过ESLint删除所有警告和错误,但不幸的是,我所做的每一次努力都没有成功。我得到的错误是:
Property 'insertId' does not exist on type 'RowDataPacket[] | RowDataPacket[][] | OkPacket | OkPacket[] | ResultSetHeader | { error: unknown; }'.
Property 'insertId' does not exist on type 'RowDataPacket[]'.ts(2339)
我的executeQuery
函数定义为:
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 };
}
};
我的实现尝试之一是this SO response,但我无法让它工作.
所有的帮助都是非常感谢的!
发布于 2022-10-15 19:18:03
所以,经过一段时间的解决后,我设法解决了自己的问题。
结果,我检查的不对。
在调用auth.insertId
之前,您需要包括以下检查:
if (!auth || !("insertId" in auth)) {
// Do something
}
这样,您实际上就不必键入任何内容,因为当您尝试使用mysql时,它会变得非常复杂。
https://stackoverflow.com/questions/74081907
复制相似问题