[NodeJS]Use GraphQL with ExpressJS
This post hasn't been updated for 3 years
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
All Rights Reserved