[NodeJS]Use GraphQL with ExpressJS
Mở đầu Ở phần trước mình đã giới thiệu về GraphQL, phần này mình sẽ hướng dẫn cách tích hợp graphql vào project expressjs sử dụng mongodb. Tạo project bằng ExpressJS express --view=pug graphql-express Cấu trúc project: public: Assest folder routes: Chứa các routes schema: ...
Mở đầu
Ở phần trước mình đã giới thiệu về GraphQL, phần này mình sẽ hướng dẫn cách tích hợp graphql vào project expressjs sử dụng mongodb.
Tạo project bằng ExpressJS
express --view=pug graphql-express
Cấu trúc project:
- public: Assest folder
- routes: Chứa các routes
- schema: Schema dùng cho graphql
- views: template view
Tiến hành cài đặt graphql, express-graphql, mongoose:
npm install --save graphql express-graphql mongoose
Tích hợp GraphQL
Tạo schema cho graphql
const schema = new GraphQLSchema({ query: new GraphQLObjectType({ name: 'RootQueryType', description: 'The root of all... queries', fields: { todo: { type: new GraphQLList(TodoType), args: { itemId: { name: 'itemId', type: new GraphQLNonNull(GraphQLInt) } }, resolve: (root, { itemId }, source, fieldASTs) => { var projections = getProjection(fieldASTs); var foundItems = new Promise((resolve, reject) => { ToDoMongo.find({ itemId }, projections, (err, todos) => { err ? reject(err) : resolve(todos) }) }) return foundItems } } } }) });
Tích hợp vào ExpressJS
import schema from './schema/schema'; import graphqlHTTP from 'express-graphql';
app.use('/graphql', graphqlHTTP({ schema: schema, graphiql: true }));
Connect tới MongoDB: Ở đây mình sử dụng docker để chạy mongo, các bạn có thể chạy trực tiếp nếu trên máy đã có mongo rùi:
docker run -p 27017:27017 --name graphql-express-mongo -d
mongoose.connect('mongodb://localhost:27017/local') var mongoDs = mongoose.connection; mongoDs.on('error', () => { console.log('Failed to connect to mongoose') }) mongoDs.once('open', () => { console.log('Connected to mongoose') })
Vậy là tạm xong việc setup. Bây giờ chúng ta sẽ test graphql.
Đâu tiên sẽ tạo model todo:
Dùng graphql để query model. Chú ý ở đây bạn có thể tuỳ chỉnh query để lấy ra những thông tin tương ứng:
Reference
http://graphql.org/graphql-js/type/#graphqlschema
Sourcecode: https://github.com/PhuongNL/graphql-express
Introduction to GraphQL - P1