我正在学习GraphQL。刚刚使用Knex.js和PostgreSQL用Apollo-server-express制作了一个简单的API。
我面临一个奇怪的问题,即按ID查询用户,该ID返回null
。
这是用户架构。
// user.schema.ts
extend type Query {
users: [User!]!
user(id: ID): User
}
这是用户解析器。
// user.resolver.ts
user: async (_: any, { id }: { id: number }, { dataSources }: any) => {
await dataSources.userAPI.findOne({ id });
}
这是用户的数据源。
async findOne({ id: idArg }: { id?: number } = {}) {
const user: User = await this.knex('user')
.where('id', idArg)
.first();
if (!user) return;
console.log('@ USER HERE > ', user)
return user;
}
注意:console.log
返回带有值的user
。
@ USER HERE > {
id: 1,
first_name: 'Some',
last_name: 'One',
email: 's@one.com',
password: '$2a$08$C8PP992UaUX.T90mxm2yD.RKB.ZnAx.gzMpK796JQei4H1BvVNxBG',
role: 'staff',
is_active: false,
created_at: 2019-09-17T16:03:06.949Z,
updated_at: 2019-09-17T16:03:06.949Z
}
但是以某种方式,它在GraphQL游乐场中返回了null
。
{
"data": {
"user": null
}
}
它与缓存有关吗?因为我测试了Apollo文档中的某些缓存控件。这就是我之前在用户findOne
解析器中添加的内容;
// Add cache hints dynamically, this will hide result and return null
// info.cacheControl.setCacheHint({ maxAge: 60, scope: 'PRIVATE' });
await dataSources.userAPI.findOne({ id });
此后,即使我将其移除,它也开始返回null
。我有相同的Post代码,而没有测试info.cache
。通过帖子ID查询可以正常工作。
请帮助我。