如何解决Apollo Server-当名称空间中的类型不可用时,如何在解析器中创建和添加对象
在下面的示例中,我尝试创建一个帖子并将其添加到词典“ post”中。当项类型对于解析器的名称空间不可用时,期望该突变如何创建,添加到散列并返回所创建项的类型?
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)",
解决方法
类型定义不是类也不是对象实例,它们仅用于强制类型。即使您在名称空间中,调用“ new”也不起作用。这是您的模拟数据库的解决方案:
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;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。