通过 id/email 在 graphQL 中查找一个元素
Posted
技术标签:
【中文标题】通过 id/email 在 graphQL 中查找一个元素【英文标题】:Finding one element in graphQL by id/email 【发布时间】:2020-08-03 23:19:51 【问题描述】:我正在尝试为 graphQL 创建一个 findOneByEmail/id。我看到了一些问题、博客文章和视频,但它们对我的情况没有帮助。我知道我必须添加一个过滤器,但我必须遗漏一些东西
这是我的resolvers
const users = [
id: 1, email:'a@a.a',password:'zaq1@WSX', pons:[value:'test'],
id: 2, email:'b@b.b',password:'ZAQ!2wsx', pons:[value:'tset']
];
const pons = [value: 'test'];
module.exports =
Query:
users: () => users,
pons: () => pons,
;
typeDefs
const gql = require('apollo-server-express');
module.exports = gql`
type Pon
value: String!
type User
id: Int
email: String!
password: String!
pons: [Pon]!
type Query
findUser(id: Int): [User]
users: [User]
pons: [Pon]
`;
app.js
const express = require('express');
const ApolloServer = require('apollo-server-express');
const typeDefs = require('./graphql/typeDefs.js');
const resolvers = require('./graphql/resolvers.js');
const server = new ApolloServer(typeDefs, resolvers);
const app = express();
server.applyMiddleware( app );
app.listen( port: 4000 , () =>
console.log(`???? Server ready at http://localhost:4000$server.graphqlPath`)
);
我正在使用 express
和 apollo-server-express
。
我尝试添加users(id: Int)
和users(email: String)
,但没有成功。您可以在findUser
查询中看到它。我正在调用这样的查询:
query
findUser(id: 1)
email
pons
value
在 GQL 操场上。
我希望能够在服务器上过滤数据,而不是在客户端上,并且在任何地方都找不到解决方案
【问题讨论】:
apollographql.com/docs/apollo-server/data/resolvers/… 【参考方案1】:您可以在GraphQL解析器中获取id
参数并通过它查询用户。
例如
const express = require('express');
const ApolloServer = require('apollo-server-express');
const gql = require('apollo-server-express');
const users = [
id: 1, email: 'a@a.a', password: 'zaq1@WSX', pons: [ value: 'test' ] ,
id: 2, email: 'b@b.b', password: 'ZAQ!2wsx', pons: [ value: 'tset' ] ,
];
const pons = [ value: 'test' ];
const typeDefs = gql`
type Pon
value: String!
type User
id: Int
email: String!
password: String!
pons: [Pon]!
type Query
findUser(id: Int): User
users: [User]
pons: [Pon]
`;
const resolvers =
Query:
users: () => users,
pons: () => pons,
findUser: (_, id ) => users.find((u) => u.id === id),
,
;
const server = new ApolloServer( typeDefs, resolvers );
const app = express();
server.applyMiddleware( app );
app.listen( port: 4000 , () => console.log(`? Server ready at http://localhost:4000$server.graphqlPath`));
在 GraphQL 游乐场中查询:
query
findUser(id: 1)
email
pons
value
回复:
"data":
"findUser":
"email": "a@a.a",
"pons": [
"value": "test"
]
【讨论】:
这是findUser
查询中的_
?
@AlexIronside 解析器的第二个参数,id
好的,我只需要在解析器中添加查找和比较?
@AlexIronside 对于现实世界,您应该使用id
参数从数据库中找到用户。但是对于这个例子,我们有一个内存数据库users
。所以,是的,你只需要从这个 users
数组中找到用户。以上是关于通过 id/email 在 graphQL 中查找一个元素的主要内容,如果未能解决你的问题,请参考以下文章
用户连接到另一个用户作为朋友关系 - AWS GraphQL 转换