2017-03-28 185 views
0

下面的代码创建查询并与我的API进行交互,因为我在我的api日志上看到message: 'Cast to ObjectId failed for value "58d" at path "_id" for,当我在graphqli中键入一个随机数时。GraphQL不会返回结果(返回null)

所以我知道它使用node-fetch命中API,但不知道为什么它没有返回我的名字。我正在使用:

{ 
    language(id:"58d80f843ad415941d8f908b"){ 
    name 
    } 
} 

我已经建立我的API与猫鼬和NodeJS。是否有人可以帮助:(

var fetch = require('node-fetch'); 
var { GraphQLSchema } = require('graphql'); 
var { GraphQLObjectType } = require('graphql'); 
var { GraphQLString } = require('graphql'); 

var BASE_URL = "http://localhost:3030"; 

function getLanguageByURL(relativeURL){ 
    return fetch(`${BASE_URL}${relativeURL}`) 
    .then(res => res.json()) 
    .then(json => json.language) 
} 
var LanguageType = new GraphQLObjectType({ 
    name: 'Language', 
    description: '...', 

    fields:() => ({ 
    name: {type: GraphQLString}, 
    }), 
}); 


var QueryType = new GraphQLObjectType({ 
    name: 'Query', 
    description: '...', 

    fields:() => ({ 
    language: { 
     type: LanguageType, 
     args: { 
      id: {type: GraphQLString}, 
     }, 

     resolve: (root, args) => 
      getLanguageByURL(`/languages/${args.id}`) 
    } 
    }), 
}); 

module.exports.schema = new GraphQLSchema({ 
    query: QueryType, 
}); 
+0

您提供的'id'不是有效的mongodb'ObjectId',并更新解析器,我想你是通过'id'值传递给'_id',所以它抛出一个'error'。!在Q中添加解析器! –

回答

0

我得到节点取到我getLanguageByURL功能我在那里的响应转换成JSON这是伟大的,但我在做(json => json.language)这是进入后立即返回错误数据那个json并且要求一个“语言”对象,这个对象在我的对象数组中不存在。我删除了这行,并且我的查询完美地工作了。