我正在尝试为graphQL创建一个findOneByEmail / id。我看到了几个问题,博客文章和视频,但它们对我的情况没有帮助。我知道我必须添加一个过滤器,但是我必须缺少一些内容
这是我的resolvers
const users = [
{id: 1, email:'[email protected]',password:'zaq1@WSX', pons:[{value:'test'}]},
{id: 2, email:'[email protected]',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: '[email protected]', password: 'zaq1@WSX', pons: [{ value: 'test' }] },
{ id: 2, email: '[email protected]', 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": "[email protected]",
"pons": [
{
"value": "test"
}
]
}
}
}