AFM*_*les 0 node.js express graphql express-graphql
开始摆弄 GraphQL,但我遇到了这个错误。不确定这是架构定义还是查询中的问题。
const express_graphql = require('express-graphql')
const { buildSchema } = require('graphql')
const users = require('../users/translator')
const schema = buildSchema(`
type User {
id: ID
email: String
role: String
}
type Query {
user(id: ID!): User
users: [User]
token(email: String!, password: String!): String!
}
type Mutation {
signup(email: String!, password: String!, role: String!): ID
}`
)
const resolvers = {
users: users.getAll,
user: users.getById,
token: users.login,
signup: users.create,
}
module.exports = app => {
// GraphQL route
app.use('/graphql', express_graphql({
schema,
rootValue: resolvers,
graphiql: true,
}))
}
Run Code Online (Sandbox Code Playgroud)
app是一个express.js服务器,同时const users保留逻辑。我能够获取用户和令牌,但是当我尝试发布突变时
{
signup(email: "my@email.com", password: "321321", role: "admin")
}
Run Code Online (Sandbox Code Playgroud)
我得到了错误Cannot query field "signup" on type "Query"。从服务器读取架构后查看 GraphiQL 建议,看起来注册突变甚至没有导出:
一些教程说我应该使用导出解析器
const resolvers = {
query: {
users: users.getAll,
user: users.getById,
token: users.login,
},
mutation: {
signup: users.create,
}
}
Run Code Online (Sandbox Code Playgroud)
但它也不起作用。有什么提示吗?
您需要指定操作类型(query、mutation或subscription),如下所示:
mutation {
signup(email: "my@email.com", password: "321321", role: "admin")
}
Run Code Online (Sandbox Code Playgroud)
如果省略操作类型,则假定该操作是查询。这称为“查询简写表示法”,但仅在您的操作未命名且不包含任何变量定义时才有效。
不管怎样,最好始终包含操作类型。
| 归档时间: |
|
| 查看次数: |
7991 次 |
| 最近记录: |