通过 id/email 在 graphQL 中查找一个元素
Finding one element in graphQL by id/email
我正在尝试为 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 操场上。
我希望能够在服务器上过滤数据,而不是在客户端上过滤数据,而且到处都找不到解决方案
您可以在 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"
}
]
}
}
}
我正在尝试为 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 操场上。
我希望能够在服务器上过滤数据,而不是在客户端上过滤数据,而且到处都找不到解决方案
您可以在 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"
}
]
}
}
}