GraphQL是一種新興的API開發(fā)工具,它允許客戶端精確地查詢數(shù)據(jù),并且可以自定義接收的數(shù)據(jù)。當(dāng)與Node.js一起使用時(shí),可以提供快速,靈活和模塊化的后端API服務(wù)。而MySQL是一種常見的關(guān)系型數(shù)據(jù)庫,它可以用于存儲(chǔ)和管理數(shù)據(jù)。
為了使用GraphQL和MySQL的組合,我們需要一個(gè)node MySQL驅(qū)動(dòng)程序,這里我們可以使用mysql2。mysql2是非常快的,并支持多重查詢和重用連接,因此通常比mysql更受歡迎。
npm install graphql express express-graphql mysql2
現(xiàn)在我們可以開始構(gòu)建我們的后端GraphQL API。下面的代碼演示了如何設(shè)置graphqlHTTP中間件以處理GraphQL請(qǐng)求,并使用mysql2連接MySQL數(shù)據(jù)庫。
const express = require('express');
const { graphqlHTTP } = require('express-graphql');
const mysql = require('mysql2/promise');
const { buildSchema } = require('graphql');
const schema = buildSchema(`
type User {
id: Int!
name: String!
email: String!
}
type Query {
users: [User]
}
`);
const app = express();
app.use('/graphql', graphqlHTTP(async () =>{
const conn = await mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'password',
database: 'mydatabase'
});
const [rows, fields] = await conn.query('SELECT id, name, email FROM users');
return {
schema: schema,
rootValue: {
users: () =>rows
},
graphiql: true
};
}));
app.listen(3000, () =>console.log('Server running on port 3000'));
在這個(gè)簡(jiǎn)單的示例中,我們定義了一個(gè)User類型和一個(gè)查詢類型,該查詢類型通過連接到MySQL數(shù)據(jù)庫返回用戶數(shù)據(jù)。當(dāng)我們?cè)L問http://localhost:3000/graphql
時(shí),將會(huì)進(jìn)入GraphQL Playground界面,您可以嘗試查詢所有用戶:
query {
users {
id
name
email
}
}
Node.js和MySQL配合使用的GraphQL API非常適合具有復(fù)雜查詢需求的應(yīng)用程序。與傳統(tǒng)的REST API相比,使用GraphQL可以提供更準(zhǔn)確,更高效的數(shù)據(jù)獲取過程。