node.js - 如何正确编写 GraphQL 解析器?
问题描述
因此,据我所知,GraphQL 站点有 S#*t 文档,其中包含嵌套查询,例如用户特殊性及其让我发疯(我现在真的很想把头发拉出来)。有人可以向我解释左轮手枪的工作原理以及为什么我正在做的事情不起作用吗?
问题: 我为我的 GraphQL API 创建了以下 index.js 文件:
var express = require('express');
var graphqlHTTP = require('express-graphql');
var { buildSchema } = require('graphql');
// Define Schemas
var schema = buildSchema(`
type Query {
user: User
}
type User {
firstName: String
lastName: String
email: String
socialMedia: SOCIALMEDIA
}
type SOCIALMEDIA {
facebook: String
instagram: String
twitter: String
}
`);
// Define resolver functions
var root = {
User: {
firstName: () => 'John',
lastName: () => 'Doe',
email: () => 'John.Doe@gmail.com'
},
SOCIALMEDIA: {
facebook: () => 'John Doe Facebook',
instagram: () => 'John Doe Instagram',
twitter: () => 'John Doe Twitter'
}
};
var app = express();
app.use('/', graphqlHTTP({
schema: schema,
rootValue: root,
graphiql: true,
}));
app.listen(8080, () => console.log('Now browse to localhost:8080'));
尽管我尽了最大努力,但当我提交以下查询时:
{
user {
firstName
}
}
我得到以下答案:
{
"data": {
"user": null
}
}
为什么会这样null
?!?!我什至没有尝试过使用user(id: $ID): [User]
迭代或任何类似于传递参数或函数的东西,它已经给了我坚持!
关于嵌套字段的工作方式,我缺少什么?
编辑: 哇......好吧,它工作了吗?
user: () => ({
firstName: 'John',
lastName: 'Doe',
email: 'John.Doe@gmail.com',
socialMedia: {
facebook: 'John Doe Facebook',
instagram: 'John Doe Instagram',
twitter: 'John Doe Twitter'
}
}),
这种胡说八道的硬性规定是什么?
解决方案
尝试这个,
// Define Schemas
var schema = buildSchema(`
type Query {
getUser: User
getSocialMedia: SOCIALMEDIA
}
type User {
firstName: String
lastName: String
email: String
socialMedia: SOCIALMEDIA
}
type SOCIALMEDIA {
facebook: String
instagram: String
twitter: String
}
`);
// Define resolver functions
var root = {
getUser: {
firstName: () => 'John',
lastName: () => 'Doe',
email: () => 'John.Doe@gmail.com',
socialMedia: {
facebook: () => 'John Doe Facebook',
instagram: () => 'John Doe Instagram',
twitter: () => 'John Doe Twitter'
}
},
getSocialMedia: {
facebook: () => 'John Doe Facebook',
instagram: () => 'John Doe Instagram',
twitter: () => 'John Doe Twitter'
}
};
推荐阅读
- python - 如何压缩两个序列(一个由 N 个元素移动)?
- flutter - 如何将另一个图标的图标中心放在颤动中
- laravel - Laravel 为 Web 和 API 控制器分离文件夹导致错误
- mysql - JPA Hibernate 多对多 NestedServletException 问题
- http - 当 HTTP 标头和元标记中都存在 Content-Security-Policy 时的问题
- node.js - Node.js 中是否有支持 `addEventListener()` 的工作人员?
- html - 如何编辑 ul li 字体大小和样式?
- python-3.x - 用于将 *args 转换为字符串的 Python 打印函数
- python - 试图找到断开图形的节点集,在python中使用networkx
- python - Pandas Q-Cut by Row