GraphQL是一種數據查詢語言和運行時,適用于API,它在客戶端中使用類型來描述數據,并將數據操作包裝在統一的端點中。而MySQL則是一種關系型數據庫,其中數據以表格的形式存儲,它能夠以多種方式為應用程序提供數據。
GraphQL可以使用各種后端存儲來獲取數據,并且可以使用框架或庫與數據庫進行連接。在本文中,我們將討論如何使用GraphQL連接MySQL。
const { graphqlHTTP } = require('express-graphql');
const express = require('express');
const {
GraphQLObjectType,
GraphQLString,
GraphQLInt,
GraphQLSchema,
GraphQLList,
GraphQLNonNull
} = require('graphql');
const mysql = require('mysql');
// 創建mysql連接
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'password',
database: 'database_name'
});
// 定義schema
const BookType = new GraphQLObjectType({
name: 'Book',
fields: () =>({
id: { type: GraphQLInt },
title: { type: GraphQLString },
author: { type: GraphQLString }
})
});
const RootQueryType = new GraphQLObjectType({
name: 'Query',
fields: () =>({
books: {
type: new GraphQLList(BookType),
resolve(parent, args) {
return new Promise((resolve, reject) =>{
// 查詢mysql中的所有書籍
connection.query('SELECT * FROM books', (err, results) =>{
if (err) {
reject(err);
} else {
resolve(results);
}
});
});
}
}
})
});
const schema = new GraphQLSchema({
query: RootQueryType
});
// 創建express服務器
const app = express();
app.use('/graphql', graphqlHTTP({
schema,
graphiql: true
}));
// 監聽端口
app.listen(3000, () =>{
console.log('Server started on port 3000');
});
以上代碼主要分為三個部分。
第一部分是創建MySQL連接對象,并使用其中包含的數據來連接數據庫。這里還可以配置連接,例如指定連接超時時間、允許的最大連接數量等。
第二部分是編寫GraphQL schema,這里我們定義了一個名為Book的Object Type,并在RootQueryType中定義了一個resolver來檢索所有書籍。在resovler中,我們執行了一個MySQL查詢,然后將查詢結果解析為GraphQL的格式并返回。
第三部分是啟動Express服務器并在端口3000上監聽請求。我們使用express-graphql中的graphqlHTTP來創建GraphQL API的單個端點。
通過這種方式,我們可以使用GraphQL與MySQL連接,輕松地將API提供給使用GraphQL的客戶端。