【发布时间】:2019-11-19 09:17:58
【问题描述】:
我的预输入搜索在 REST 上运行良好,但我正在转换为 GraphQL,这有其挑战。
当用户在表单字段中输入姓氏时,建议的结果会显示在下面的数据表中。每个字母都由 RxJS 主题处理。
var searchTerm$ 是一种 RXJS 可观察对象,称为 Subject 绑定到 HTML。以下是从 Angular 应用程序中的 OnViewInit 生命周期挂钩调用的。通过数据库列 last_name 进行搜索。
但是,由于视图加载和搜索不起作用,这会导致错误请求 400 错误。我想这可能需要订阅,但我在上面找到的所有内容都是关于使用 Web 套接字连接到远程 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;
}
编辑:
来自开发工具中网络面板的错误。控制台消息毫无价值。
{"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 行。
【问题讨论】:
-
错误请求通常意味着查询中的语法或验证错误。检查来自服务器的完整响应以获取详细信息,或者如果您需要帮助解决问题,请使用查询和完整错误更新您的问题
-
丹尼尔,我不会忽视你的评论!我开始得到你要的东西,我的 Mac 被锁了。恢复并不顺利,然后我的完整堆栈需要两天的升级依赖地狱。一切恢复正常后回复您。
-
OK Daniel,我在帖子中添加了似乎是错误消息中最重要的部分。我不知道如何从中找出问题。
-
不要从控制台获取错误,而是打开开发者控制台的网络选项卡并查看服务器的实际响应。这应该包含更详细的消息,如果是语法错误,通常会详细到行号和列。
-
糟糕,抱歉,累了。我修正了我的问题中的一个错字并发布了错误。 “未提供”是问题,但我不知道如何提供。假设我在输入表单中输入“p”。我的 searchTerm$ var 绑定到表单,并且应该提供 var。但是,表单在呈现时由于 GraphQL 而崩溃。我在构造函数中有 Angular 代码,因为它最适合 REST。令人困惑。