2017-10-09 146 views
0

我剛開始進入GraphQL。我正在使用GraphQL.js並進行表達。現在我正在嘗試構建一個簡單的示例,使用硬編碼的JSON作爲我的JavaScript文件中的數據。然後,我想使用快遞中間件通過捲曲或失眠來收聽HTTP請求。在中間件中,我想使用body-parser來提取查詢。現在我在解析器遇到問題。GraphQL。如何編寫解析器

請看看我的代碼。

var express = require('express'); 
var graphqlHTTP = require('express-graphql'); 
var { buildSchema, graphql } = require('graphql'); 
var bodyParser = require('body-parser'); 

var schema = buildSchema(` 
    type Product { 
    name: String! 
    price: Int! 
    } 

    type Query { 
    product(name: String): Product 
    } 
`); 

var products = { 
    'Mango': { 
    name: 'Mango', 
    price: 12, 
    }, 
    'Apfel': { 
    name: 'Apfel', 
    price: 3, 
    }, 
}; 

resolvers = { 
    Query: { 
    product: (root, { name}) => { 
     return products[name]; 
    }, 
    }, 
}; 

var app = express(); 
app.use(bodyParser.text({ type: 'application/graphql' })); 

app.post('/graphql', (req, res) => { 
    graphql(schema, req.body) 
    .then((result) => { 
    res.send(JSON.stringify(result, null, 2)); 
    }); 
}); 

app.listen(4000); 

這是行不通的。當我發佈使用curl查詢與

捲曲-XPOST -H 「內容類型:應用程序/ graphql」 -d 「{產品(名稱:\」 APFEL \ 「){名價格}}」 http://localhost:4000/graphql

我得到響應{「data」。 {「product」:null}}。解析器不會被調用。我怎樣才能正確地做到這一點?

回答

0

你可以試試嗎?

var resolvers = { 
 

 
    product: (args) => { 
 
    return products[args.name]; 
 
    }, 
 

 

 
}; 
 
app.post('/graphql', (req, res) => { 
 
    graphql(schema, req.body, resolvers) 
 
    .then((result) => { 
 
     res.send(JSON.stringify(result, null, 2)); 
 
    }); 
 
});

我認爲這可以解決您的問題

+0

謝謝!那就是訣竅。 –

0

我建議看FunFunFunction系列情節集中在GraphQl: GraphQl Basics

他所有的情節都相當有趣的(真有趣)...