Мой поиск с опережением по типу отлично работал с REST, но я перехожу на GraphQL, у которого есть свои проблемы.
Когда пользователь вводит фамилию в поле формы, предлагаемые результаты отображаются в таблице данных ниже. Каждое письмо обрабатывается субъектом RxJS.
var searchTerm $ - это тип наблюдаемого RXJS, который называется Предмет, привязанный к HTML. Следующее вызывается из ловушки жизненного цикла OnViewInit в приложении Angular. Поиск осуществляется по столбцу базы данных last_name.
Однако это приводит к ошибке Bad Request 400, так как представление загружается и поиск не работает. Я думал, может быть, это требует подписки, но все, что я нахожу на них, об использовании веб-сокетов для подключения к удаленному URL-адресу и серверу. Куда мне идти отсюда?
Я использую клиент Angular Apollo с Apollo Express, но я был бы рад любому решению JS и попытался бы выяснить это оттуда. На стороне сервера находится Nestjs, который просто оборачивает Apollo Server.
const lastNameSearch = gql `
query ($input: String!) {
lastNameSearch(input: $input) {
first_name
last_name
user_name
pitch
main_skill_title
skills_comments
member_status
}
}`;
this.apollo
.watchQuery({
query: lastNameSearch,
variables: {
last_name: searchTerm$, // Trying to use the observable here.
},
})
.valueChanges
.subscribe(result => {
console.log('data in lastNameSearch: ', result);
}),
Схема на сервере:
lastNameSearch(input: String!): [Member]
Резольвер:
@Query()
async lastNameSearch(@Args('input') input: String) {
const response = await this.membersService.lastNameSearch(input);
return await response;
}
Edit:
Ошибка с панели «Сеть» в инструментах разработчика. Консольное сообщение бесполезно.
{"errors":[{"message":"Variable \"$input\" of required type \"String!\" was not provided.","locations":[{"line":1,"column":8}],"extensions":{"code":"INTERNAL_SERVER_ERROR","exception":{"stacktrace":["GraphQLError: Variable \"$input\" of required type \"String!\" was not provided."," at getVariableValues
И это продолжает показывать свойства и методы в приложении еще на 300 строк или около того.