GraphQL 是一种新型的 API 查询语言,它可以帮助前端开发者更加灵活地获取数据。与 RESTful API 不同,GraphQL 可以让前端开发者精确地指定需要获取的数据,从而减少不必要的网络请求,提高了应用的性能。然而,GraphQL 本身并不处理数据的持久化,这就需要我们使用其他技术来实现。
本文将介绍如何使用 GraphQL 处理持久化数据,并提供相应的示例代码和指导意义。
什么是持久化数据?
在计算机科学中,持久化数据是指将数据存储到永久性存储介质中,以便在程序关闭或系统重启后仍然可以访问。常见的持久化数据存储方式包括关系型数据库、NoSQL 数据库、文件系统等。
在 Web 应用中,持久化数据通常用于存储用户信息、订单信息、商品信息等,以便在用户下次访问时能够快速获取数据。
GraphQL 如何处理持久化数据?
与 RESTful API 不同,GraphQL 并没有内置的数据持久化机制。这就需要我们使用其他技术来实现数据的持久化。
常见的持久化数据存储方式包括关系型数据库和 NoSQL 数据库。下面我们将分别介绍如何使用这两种数据库来处理 GraphQL 的持久化数据。
使用关系型数据库
关系型数据库是一种基于关系模型的数据库,它将数据组织成表格的形式,每个表格包含多个列和行。常见的关系型数据库包括 MySQL、PostgreSQL、Oracle 等。
在 GraphQL 中,我们可以使用 ORM(Object-Relational Mapping)框架来操作关系型数据库。ORM 框架可以将数据库中的表格映射成对象,从而简化了数据库操作。
下面我们以 Node.js 为例,介绍如何使用 Sequelize ORM 框架来操作 MySQL 数据库。
安装 Sequelize
首先,我们需要安装 Sequelize 和 MySQL2:
npm install --save sequelize mysql2
创建数据库连接
接下来,我们需要创建一个数据库连接。在 Sequelize 中,可以使用 Sequelize
构造函数来创建数据库连接。我们需要传入数据库的 URL、用户名、密码等信息来创建连接。
const { Sequelize } = require('sequelize'); const sequelize = new Sequelize('mysql://username:password@localhost:3306/database_name');
定义模型
在 Sequelize 中,我们可以使用 sequelize.define
方法来定义模型。模型是指数据库中的表格,在 Sequelize 中可以将其映射成一个 JavaScript 对象。
// javascriptcn.com 代码示例 const { Sequelize } = require('sequelize'); const sequelize = new Sequelize('mysql://username:password@localhost:3306/database_name'); const User = sequelize.define('user', { id: { type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true, }, name: { type: Sequelize.STRING, allowNull: false, }, age: { type: Sequelize.INTEGER, allowNull: false, }, });
在上面的代码中,我们定义了一个名为 user
的模型,它有三个属性:id
、name
和 age
。其中,id
是主键,自增;name
和 age
都是字符串类型,不能为空。
查询数据
在 GraphQL 中,我们可以使用 resolve
函数来查询数据。在 Sequelize 中,我们可以使用 sequelize.models.{model_name}.findAll
方法来查询数据。其中,{model_name}
是我们在定义模型时指定的模型名称。
// javascriptcn.com 代码示例 const { Sequelize } = require('sequelize'); const sequelize = new Sequelize('mysql://username:password@localhost:3306/database_name'); const User = sequelize.define('user', { id: { type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true, }, name: { type: Sequelize.STRING, allowNull: false, }, age: { type: Sequelize.INTEGER, allowNull: false, }, }); const resolvers = { Query: { users: async () => { const users = await sequelize.models.user.findAll(); return users; }, }, };
在上面的代码中,我们定义了一个名为 users
的查询,它使用 sequelize.models.user.findAll()
方法来查询所有用户数据。
修改数据
在 GraphQL 中,我们可以使用 mutation
函数来修改数据。在 Sequelize 中,我们可以使用 sequelize.models.{model_name}.update
方法来修改数据。其中,{model_name}
是我们在定义模型时指定的模型名称。
// javascriptcn.com 代码示例 const { Sequelize } = require('sequelize'); const sequelize = new Sequelize('mysql://username:password@localhost:3306/database_name'); const User = sequelize.define('user', { id: { type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true, }, name: { type: Sequelize.STRING, allowNull: false, }, age: { type: Sequelize.INTEGER, allowNull: false, }, }); const resolvers = { Mutation: { updateUser: async (_, args) => { const { id, name, age } = args; await sequelize.models.user.update({ name, age }, { where: { id } }); const user = await sequelize.models.user.findByPk(id); return user; }, }, };
在上面的代码中,我们定义了一个名为 updateUser
的修改操作,它使用 sequelize.models.user.update
方法来修改指定用户的姓名和年龄,并使用 sequelize.models.user.findByPk
方法来获取修改后的用户数据。
使用 NoSQL 数据库
NoSQL 数据库是一种非关系型数据库,它不使用关系模型来存储数据,而是使用键值对、文档、图形等方式。常见的 NoSQL 数据库包括 MongoDB、Redis、Couchbase 等。
在 GraphQL 中,我们可以使用 ORM 框架来操作 NoSQL 数据库。ORM 框架可以将数据库中的文档映射成对象,从而简化了数据库操作。
下面我们以 Node.js 为例,介绍如何使用 Mongoose ORM 框架来操作 MongoDB 数据库。
安装 Mongoose
首先,我们需要安装 Mongoose:
npm install --save mongoose
创建数据库连接
接下来,我们需要创建一个数据库连接。在 Mongoose 中,可以使用 mongoose.connect
方法来创建数据库连接。我们需要传入数据库的 URL、用户名、密码等信息来创建连接。
const mongoose = require('mongoose'); mongoose.connect('mongodb://username:password@localhost:27017/database_name', { useNewUrlParser: true, useUnifiedTopology: true, });
定义模型
在 Mongoose 中,我们可以使用 mongoose.Schema
方法来定义模型。模型是指数据库中的文档,在 Mongoose 中可以将其映射成一个 JavaScript 对象。
// javascriptcn.com 代码示例 const mongoose = require('mongoose'); const userSchema = new mongoose.Schema({ name: { type: String, required: true, }, age: { type: Number, required: true, }, }); const User = mongoose.model('User', userSchema);
在上面的代码中,我们定义了一个名为 User
的模型,它有两个属性:name
和 age
。其中,name
和 age
都是必填字段。
查询数据
在 GraphQL 中,我们可以使用 resolve
函数来查询数据。在 Mongoose 中,我们可以使用 Model.find
方法来查询数据。其中,Model
是我们定义的模型名称。
// javascriptcn.com 代码示例 const mongoose = require('mongoose'); const userSchema = new mongoose.Schema({ name: { type: String, required: true, }, age: { type: Number, required: true, }, }); const User = mongoose.model('User', userSchema); const resolvers = { Query: { users: async () => { const users = await User.find(); return users; }, }, };
在上面的代码中,我们定义了一个名为 users
的查询,它使用 User.find()
方法来查询所有用户数据。
修改数据
在 GraphQL 中,我们可以使用 mutation
函数来修改数据。在 Mongoose 中,我们可以使用 Model.findByIdAndUpdate
方法来修改数据。其中,Model
是我们定义的模型名称。
// javascriptcn.com 代码示例 const mongoose = require('mongoose'); const userSchema = new mongoose.Schema({ name: { type: String, required: true, }, age: { type: Number, required: true, }, }); const User = mongoose.model('User', userSchema); const resolvers = { Mutation: { updateUser: async (_, args) => { const { id, name, age } = args; await User.findByIdAndUpdate(id, { name, age }); const user = await User.findById(id); return user; }, }, };
在上面的代码中,我们定义了一个名为 updateUser
的修改操作,它使用 User.findByIdAndUpdate
方法来修改指定用户的姓名和年龄,并使用 User.findById
方法来获取修改后的用户数据。
总结
本文介绍了如何使用关系型数据库和 NoSQL 数据库来处理 GraphQL 的持久化数据。在关系型数据库中,我们可以使用 Sequelize ORM 框架来操作 MySQL 数据库;在 NoSQL 数据库中,我们可以使用 Mongoose ORM 框架来操作 MongoDB 数据库。通过本文的介绍,相信读者已经掌握了如何处理 GraphQL 的持久化数据,并可以在实际项目中应用。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65642dded2f5e1655dd9481f