Как проверить пустой ли ответ запроса к mysql2?
Я использую mysql2/promise для получения выборки из базы данных. Если запрос дал результат и нашел записи в базе, то все хорошо, я получаю записи, но если запрос не дал результата, как это проверить? Казалось бы, все просто, будь это обычный массив, я бы просто проверил lenght и определил бы есть ли результат. Но как в данном случае понять, что ответ базы данных пустой?
В моем случае if (tasks) всегда срабатывает, получил ли я записи из базы данных или же нет.
import {Result} from "../Result";
import {Errors} from "../Error";
import {userAuthorised} from "../userAuthorised";
import { Connection, RowDataPacket } from "mysql2/promise";
export const getTasks = async (result: Result, db: Connection, body: any) => {
try {
await userAuthorised(db, body)
try {
const [tasks] = await db.query(`select * from tasks where project_id = ${body.project_id} and parent_id ${body.task_id === undefined ? 'is null' : '= ' + body.task_id}`)
if (tasks) result.tasks = tasks
else result.error = Errors.tasksNotFound()
} catch (error) {
result.error = Errors.dbError()
}
} catch (error) {
result.error = error
}
}
Ответы (1 шт):
Автор решения: cheerful_weasel
→ Ссылка
Надо сначала проверить, что ответ является массивом, и уже тогда становится доступен параметр lenght
if (Array.isArray(tasks) && tasks.length > 0) result.tasks = tasks
Если же сразу написать так:
if (tasks.length > 0) result.tasks = tasks
Тогда будет ошибка.
Еще можно так
const tasks = res as RowDataPacket[]
if (tasks.length > 0) result.tasks = tasks