2017-07-16 6 views
0

私はgraphqlマングースMongoDBのデータベースからいくつかのデータを読み取るしようとしているが、毎回、私はそれがnull返しますが、エラーがスローされませんデシベルを問い合わせます。GraphQL XにMongoDB

// Controller.js 
exports.user_read = function(id) { 
    return new Promise((resolve, reject) => { 
    Contact.findById(id, function(err, user) { 
     err ? reject(err) : resolve(user); 
    } 
    }); 
} 

// Resolver.js 
var contact = require('Controller'); 
... 
// root object passed as rootValue to graphqlHTTP 
getUser: ({ id }) => { 
    contact.user_read(id) 
} 
... 

任意のヒントとヘルプをいただければ幸いです。 ここではコードです。 P.P.これは、同じPromiseフォーマットをcontroller.jsファイルで使用するすべてのクエリでも起こっているようです。

+1

ますことを除いて、あなたが提供したコードに何か問題があるように思えません。新しいPromiseで 'Contact.findById'をラップする必要はありません。コールバックを省略すると、すでに約束を返すはずです。いずれにせよ、それは問題ではないはずです。 ** GraphQLの外でfindById **を呼び出して必要なデータを取得できる場合は、おそらくGraphQLの設定に問題があり、フルスキーマとルートオブジェクトを投稿する必要があります。リゾルバの外でもfindByIdを返すことができない場合は、Contactモデルとデータベースへの接続方法を含めることができます。 –

答えて

1

await contact.user_read(id)が必要です。待たずに、あなたは単にプロミスを返すだけです。返されると保留になる可能性が最も高いので、nullが返されます。余分な約束を取り除くためにダニエルReardenの提案を含め

は、ここにあなたのコードは次のようになります:

// Controller.js 
exports.user_read = async id => { 
    return Contact.findById(id, (err, user) => { 
     err ? reject(err) : resolve(user); 
    }); 
} 

// Resolver.js 
var contact = require('Controller'); 
... 
// root object passed as rootValue to graphqlHTTP 
getUser: ({ id }) => { 
    return await contact.user_read(id) 
} 
... 
関連する問題