2017-04-24 65 views
0

我不想爲我的keystone.js應用程序(通過express express middleware express-graphql)製作GraphQL端點。GraphQL與Keystone希望字段類型必須是輸出類型,但得到:undefined

這裏是我的梯形架構:

const keystone = require('keystone'); 

const Types = keystone.Field.Types; 

const User = new keystone.List('User'); 

const localStorage = new keystone.Storage({ 
    adapter: keystone.Storage.Adapters.FS, 
    fs: { 
    path: './src/upload/avatars', 
    publicPath: '/upload/avatars', 
    }, 
}); 

User.add({ 
    name: { type: Types.Name, required: true, index: true }, 
    email: { type: Types.Email, initial: true, index: true }, 
    password: { type: Types.Password, initial: true, required: true }, 
}, 'Profile', { 
    photo: { type: Types.File, storage: localStorage }, 
}, 'Permissions', { 
    isAdmin: { type: Boolean, label: 'Can access Keystone', index: true }, 
}, 
); 

// Provide access to Keystone 
User.schema.virtual('canAccessKeystone').get(function() { 
    return this.isAdmin; 
}); 

User.defaultColumns = 'name, email, isAdmin'; 
User.register(); 

與實現爲keystone.js文件類型場的照片,關鍵的問題。

下面我GraphQL模式:

import { GraphQLSchema, GraphQLID, GraphQLList, GraphQLNonNull, GraphQLObjectType, } from 'graphql'; 

const keystoneTypes = require('keystone-graphql').Types; const keystone = require('keystone'); 

const User = keystone.list('User'); 

const userType = new GraphQLObjectType({ name: 'User', fields:() 
=> ({ 
    id: { type: new GraphQLNonNull(GraphQLID) }, 
    name: { type: new GraphQLNonNull(keystoneTypes.Name(User.fields.name)) }, 
    email: keystoneTypes.Email(User.fields.email), 
    photo: keystoneTypes.File(User.fields.photo), }), }); 

const queryRootType = new GraphQLObjectType({ name: 'Query', fields: { 
    users: { 
     type: new GraphQLList(userType), 
     resolve:() => 
     User.model.find().exec(), 
    }, 
    user: { 
     type: userType, 
     args: { 
     id: { 
      description: 'id of the user', 
      type: new GraphQLNonNull(GraphQLID), 
     }, 
     }, 
     resolve: (_, args) => User.model.findById(args.id).exec(), 
    }, }, }); 

export default new GraphQLSchema({ query: queryRootType, }); 

和外地文件執行,其中包括在叉形梯形graphql包:

'use strict'; 

const GraphQL = require('graphql'); 

const KeystoneFileType = new GraphQL.GraphQLObjectType({ 
    name: 'KeystoneFile', 
    fields: { 
    size: { type: GraphQL.GraphQLInt }, 
    mimetype: { type: GraphQL.GraphQLString }, 
    filename: { type: GraphQL.GraphQLString }, 
    }, 
}); 

module.exports = (field) => KeystoneFileType; 

我想要拉請求梯形graphql包文件時它會正常工作。在這一刻我有錯誤,從GraphQL:

Error: User.photo field type must be Output Type but got: undefined. 
    at invariant (/Users/Vadim/Dropbox/WebStormProjects/mulibwanji/node_modules/graphql/jsutils/invariant.js:19:11) 
    at /Users/Vadim/Dropbox/WebStormProjects/mulibwanji/node_modules/graphql/type/definition.js:335:5 
    at Array.forEach (native) 
    at defineFieldMap (/Users/Vadim/Dropbox/WebStormProjects/mulibwanji/node_modules/graphql/type/definition.js:326:14) 
    at GraphQLObjectType.getFields (/Users/Vadim/Dropbox/WebStormProjects/mulibwanji/node_modules/graphql/type/definition.js:284:44) 
    at typeMapReducer (/Users/Vadim/Dropbox/WebStormProjects/mulibwanji/node_modules/graphql/type/schema.js:206:25) 
    at typeMapReducer (/Users/Vadim/Dropbox/WebStormProjects/mulibwanji/node_modules/graphql/type/schema.js:187:12) 
    at /Users/Vadim/Dropbox/WebStormProjects/mulibwanji/node_modules/graphql/type/schema.js:216:20 
    at Array.forEach (native) 
    at typeMapReducer (/Users/Vadim/Dropbox/WebStormProjects/mulibwanji/node_modules/graphql/type/schema.js:207:27) 
    at Array.reduce (native) 
    at new GraphQLSchema (/Users/Vadim/Dropbox/WebStormProjects/mulibwanji/node_modules/graphql/type/schema.js:95:34) 
    at Object.<anonymous> (/Users/Vadim/Dropbox/WebStormProjects/mulibwanji/graphql/Schema.js:58:16) 

回答

0

此時此刻我繞過這個:

export const File = new GraphQLObjectType({ 
    name: 'KeystoneFileType', 
    fields: { 
    size: { type: GraphQLInt }, 
    filename: { type: GraphQLString }, 
    mimetype: { type: GraphQLString }, 
    }, 
}); 

所以在這個時候就必須去無(場)=>文件類型,因爲我看到,但如果有人會發現真正的問題,我會很高興。

相關問題