2017-10-29 113 views
0

我努力學習graphql,這樣我可以把它應用到一個陣營的網站。我現在遇到了一些麻煩,但無法弄清楚爲什麼當我100%確定返回的內容不爲null時,它返回null。如果我在解析器中打印results,它會按預期打印一個用戶對象數組,但是當它返回時,說明我爲字段Query.users返回null。任何幫助,將不勝感激。GraphQL阿波羅都不能返回null不可爲空

Query: { // graphql query resolver 
    users: function (parent, args, { User }) { 
     var mongoose = require('mongoose'); 
     var array = []; 
     mongoose.connect('localhost:27017', function(err){ 
      if(err) throw err; 
      User.find({}).then(results=>{ 
       console.log(results); 
       return results; 
      }); 
     }); 
    } 
} 

type Query { //query typedef 
    users: [User]! 
} 

type User { // graphql schema typedef 
    _id: String! 
    username: String!, 
    email: String!, 
    joined: String, 
    interests: [String], 
    friends: [User] 
} 

var User = new Schema({ // mongoose schema def 
    username: !String, 
    email: !String, 
    joined: String, 
    interests: [String], 
    friends: [[this]] 
}); 

回答

1

這是因爲你沒有返回任何東西在你的users函數。

你可以等待,並返回像下面的解決承諾值。試試這個,並檢查你是否仍然無法從你的查詢中獲得用戶列表。

users: function (parent, args, { User }) { 
    return await getUsers() 
} 


const getUsers =() => { 
    var mongoose = require('mongoose'); 
    return new Promise((resolve, reject) => { 
    mongoose.connect('localhost:27017', function(err){ 
     if(err) 
     reject(err); 
     User.find({}).then(results=>{ 
     console.log(results); 
     resolve(results); 
     }); 
    });   
    }); 
} 

我添加的代碼有ES6,請將其轉換爲ES5,如果這是您通過您的應用程序使用。

+0

工作正常!非常感謝。 –