apollo - Apollo Server - 当类型在命名空间中不可用时如何在解析器中创建和添加对象
问题描述
在下面的示例中,我尝试创建一个帖子并将其添加到 Dictionary 'post' 中。当项目类型对解析器的命名空间不可用时,Mutation 如何创建、添加到哈希并返回所创建项目的类型?
mutation createPost {
createPost(input: {name: "Post Name"}){
name
}
}
index.js:
const { ApolloServer, gql } = require('apollo-server');
const dictionary = {};
const typeDefs = gql`
input PostSpecInput {
name: String
}
type PostSpec {
id: ID!
name: String
}
type Mutation {
createPost(input: PostSpecInput): PostSpec
}
type Query {
post_specs: [PostSpec]
}
`;
const resolvers = {
Query: {
post_specs: () => Object.keys(dictionary).map(function(key){
return dictionary[key];
})
},
Mutation: {
createPost(parent, args, context, info) {
var id = require('crypto').randomBytes(10).toString('hex');
const postSpec = new PostSpec(id, args.input);
posts_mock_database[id] = args.input;
return postSpec;
}
}
}
const server = new ApolloServer({typeDefs, resolvers})
server.listen().then(({url}) => {
console.log(`Server Ready at ${url}`);
})
错误:
{
"errors": [
{
"message": "PostSpec is not defined",
"locations": [
{
"line": 2,
"column": 3
}
],
"path": [
"createPost"
],
"extensions": {
"code": "INTERNAL_SERVER_ERROR",
"exception": {
"stacktrace": [
"ReferenceError: PostSpec is not defined",
" at createPost (index.js:38:34)",
解决方案
类型定义不是类也不是对象实例,它们只是用于强制类型。即使您在命名空间中,调用“新”也行不通。这是您的模拟数据库的解决方案:
Mutation: {
createPost(parent, args, context, info) {
var id = require('crypto').randomBytes(10).toString('hex');
const newPostSpec = { id: id, name: args.input.name }
posts_mock_database[id] = newPostSpec;
return newPostSpec;
}
}
推荐阅读
- c# - xamarin Forms 列表中的内存问题
- rust - 如何从结果中获取值?
- sql - 更改用户密码会导致身份验证失败
- python - 使用 AWS Lambda 自定义调整图像大小
- python - 熊猫使用 lineterminator='\n' 保存到 csv
- java - 在尝试水平扩展连接到 Postgres 的 Spring Boot APP 时面临丢失的更新
- amazon-web-services - AWS 管理员账户,但看不到账单
- php - 如何将 Url 存储在变量中并检查它是否与另一个 url 匹配
- javascript - 如何使用 querySelectorAll 获取 Youtube 频道名称?
- flutter - 溢出的注释文本不对齐