#node.js #postgresql #graphql #knex.js
Вопрос:
В моем API узла с использованием GraphQL я добавил функции Knex для выполнения функций БД, таких как вставка, обновление, фильтрация и т. Д.
Во время создания моего фильтра, который приведен ниже, когда я нажимаю на любой из вариантов фильтров, имя детали я всегда получал синтаксическую ошибку
"message": "select "member"."id" as "id", "member"."conversation_id" as "conversationId", "member"."name" as "name", "member"."muted" as "muted", "member"."conversation_member_type" as "memberType", "member"."member_id" as "memberId", "member"."created_at" as "createdAt", "member"."updated_at" as "updatedAt", "member"."deleted_at" as "deletedAt" from "member" where "conversation_member_type" in $1 order by "created_at" DESC - syntax error at or near "$1"",
Мой фильтр
filter({
filter = {},
pagination = {},
sort = { orderBy: 'createdAt', direction: 'DESC' },
}) {
const builder = this.tx(tableName);
if (!isEmpty(filter)) {
console.log(filter);
const { conversationId, name, memberId, memberType } = filter;
if (conversationId)
builder.whereIn(columns.conversationId, conversationId);
if (name) builder.where(columns.name, name);
if (memberId) builder.whereIn(columns.memberId, memberId);
if (memberType) {
builder.whereIn(columns.memberType, memberType);
}
}
if (!isEmpty(pagination)) {
const { limit, skip } = pagination;
if (limit > 0) builder.limit(limit);
if (skip > 0) builder.offset(skip);
}
if (!isEmpty(sort)) {
const { orderBy, direction } = sort;
if (orderBy) builder.orderBy(columns[orderBy], direction);
}
return builder;
}
Этот фильтр принимает параметр фильтр из запроса в GraphQL как
query memebrs {
listMembers(filter: { memberType: CONSENTEE_RECIPIENT }) {
nodes {
id
}
}
}
Результатом должен быть список членов, имеющих этот тип члена, но вместо этого у меня синтаксическая ошибка.
Запрос работает только тогда, когда я использую имя вместо других параметров. Я не знаю, почему в других случаях я получаю эту синтаксическую ошибку. У меня больше нет идей, почему это не работает.
В качестве дополнительной информации мой интерфейс для столбцов базы данных выглядит следующим образом
export const columns = {
id: 'id',
conversationId: 'conversation_id',
name: 'name',
muted: 'muted',
memberType: 'conversation_member_type',
memberId: 'member_id',
createdAt: 'created_at',
updatedAt: 'updated_at',
deletedAt: 'deleted_at',
};