前言
RESTful API 是现代 Web 开发中常用的一种 API 设计风格,它基于 HTTP 协议,使用标准的 HTTP 方法(GET、POST、PUT、DELETE 等)来操作资源。Fastify 是一个高效、低开销的 Node.js Web 框架,而 MongoDB 是一种面向文档的 NoSQL 数据库。本文将介绍如何使用 Fastify 和 MongoDB 构建 RESTful API。
准备工作
在开始之前,我们需要安装 Node.js 和 MongoDB。Node.js 可以从官网下载安装包,MongoDB 可以从官网下载并安装。安装完成后,我们需要在本地运行 MongoDB 数据库实例。
创建项目
首先,我们需要创建一个新的 Node.js 项目。在命令行中,进入项目目录并执行以下命令:
mkdir fastify-mongodb-api cd fastify-mongodb-api npm init -y
这将创建一个新的 Node.js 项目,并自动生成 package.json
文件。
安装依赖
我们需要安装 Fastify 和 MongoDB Node.js 驱动程序。在项目目录中执行以下命令:
npm install fastify fastify-cors fastify-swagger fastify-mongodb --save
这将安装 Fastify 及其相关插件,以及 MongoDB Node.js 驱动程序。
创建 API
接下来,我们将创建一个简单的 RESTful API,用于管理用户数据。我们将使用 Fastify 和 MongoDB 来实现这个 API。
连接 MongoDB
首先,我们需要连接到 MongoDB 数据库。在项目根目录下创建一个名为 app.js
的文件,并将以下代码添加到文件中:
// javascriptcn.com 代码示例 const fastify = require('fastify')({ logger: true }); const cors = require('fastify-cors'); const swagger = require('fastify-swagger'); const mongodb = require('fastify-mongodb'); const options = { swagger: { info: { title: 'Fastify MongoDB API', version: '1.0.0', }, }, mongodb: { url: 'mongodb://localhost:27017', database: 'fastify_mongodb_api', }, }; fastify.register(cors); fastify.register(swagger, options.swagger); fastify.register(mongodb, options.mongodb); fastify.listen(3000, (err, address) => { if (err) { fastify.log.error(err); process.exit(1); } fastify.log.info(`server listening on ${address}`); });
这段代码创建了一个 Fastify 应用程序,并连接到了 MongoDB 数据库。我们使用了 fastify-cors
插件来启用跨域资源共享,fastify-swagger
插件来生成 API 文档,以及 fastify-mongodb
插件来连接到 MongoDB 数据库。
创建用户模型
接下来,我们需要创建一个用户模型。在 app.js
文件中添加以下代码:
// javascriptcn.com 代码示例 const userSchema = { type: 'object', properties: { id: { type: 'string' }, name: { type: 'string' }, email: { type: 'string' }, }, }; const userCollection = 'users'; fastify.mongo.db.collection(userCollection).createIndex({ email: 1 }, { unique: true }); fastify.route({ method: 'POST', url: '/users', schema: { body: userSchema, }, handler: async (request, reply) => { const { name, email } = request.body; const result = await fastify.mongo.db.collection(userCollection).insertOne({ name, email }); return { id: result.insertedId, name, email }; }, });
这段代码定义了一个名为 userSchema
的用户模式,并创建了一个名为 userCollection
的 MongoDB 集合。我们还在 email
字段上创建了一个唯一索引,以确保不会出现重复的电子邮件地址。
最后,我们创建了一个名为 /users
的路由,用于创建新用户。该路由使用了 userSchema
模式来验证请求体,并将用户数据插入到 MongoDB 数据库中。
获取用户列表
接下来,我们将创建一个名为 /users
的 GET 路由,用于获取用户列表。在 app.js
文件中添加以下代码:
fastify.route({ method: 'GET', url: '/users', handler: async (request, reply) => { const result = await fastify.mongo.db.collection(userCollection).find().toArray(); return result; }, });
这段代码创建了一个名为 /users
的 GET 路由,用于获取用户列表。该路由使用了 fastify-mongodb
插件提供的 find()
方法来查询 MongoDB 数据库中的所有用户数据。
获取单个用户
接下来,我们将创建一个名为 /users/:id
的 GET 路由,用于获取单个用户。在 app.js
文件中添加以下代码:
// javascriptcn.com 代码示例 const userParamsSchema = { type: 'object', properties: { id: { type: 'string' }, }, }; fastify.route({ method: 'GET', url: '/users/:id', schema: { params: userParamsSchema, }, handler: async (request, reply) => { const { id } = request.params; const result = await fastify.mongo.db.collection(userCollection).findOne({ _id: fastify.mongo.ObjectId(id) }); if (!result) { reply.code(404); throw new Error('User not found'); } return result; }, });
这段代码创建了一个名为 /users/:id
的 GET 路由,用于获取单个用户。该路由使用了 userParamsSchema
模式来验证路由参数,并使用 fastify-mongodb
插件提供的 findOne()
方法来查询 MongoDB 数据库中的单个用户数据。
更新用户
接下来,我们将创建一个名为 /users/:id
的 PUT 路由,用于更新用户数据。在 app.js
文件中添加以下代码:
// javascriptcn.com 代码示例 const updateUserSchema = { type: 'object', properties: { name: { type: 'string' }, email: { type: 'string' }, }, }; fastify.route({ method: 'PUT', url: '/users/:id', schema: { params: userParamsSchema, body: updateUserSchema, }, handler: async (request, reply) => { const { id } = request.params; const { name, email } = request.body; const result = await fastify.mongo.db.collection(userCollection).findOneAndUpdate( { _id: fastify.mongo.ObjectId(id) }, { $set: { name, email } }, { returnOriginal: false }, ); if (!result.value) { reply.code(404); throw new Error('User not found'); } return result.value; }, });
这段代码创建了一个名为 /users/:id
的 PUT 路由,用于更新用户数据。该路由使用了 userParamsSchema
模式来验证路由参数,并使用 updateUserSchema
模式来验证请求体。该路由使用了 fastify-mongodb
插件提供的 findOneAndUpdate()
方法来更新 MongoDB 数据库中的用户数据。
删除用户
最后,我们将创建一个名为 /users/:id
的 DELETE 路由,用于删除用户数据。在 app.js
文件中添加以下代码:
// javascriptcn.com 代码示例 fastify.route({ method: 'DELETE', url: '/users/:id', schema: { params: userParamsSchema, }, handler: async (request, reply) => { const { id } = request.params; const result = await fastify.mongo.db.collection(userCollection).findOneAndDelete({ _id: fastify.mongo.ObjectId(id) }); if (!result.value) { reply.code(404); throw new Error('User not found'); } return result.value; }, });
这段代码创建了一个名为 /users/:id
的 DELETE 路由,用于删除用户数据。该路由使用了 userParamsSchema
模式来验证路由参数,并使用 fastify-mongodb
插件提供的 findOneAndDelete()
方法来删除 MongoDB 数据库中的用户数据。
运行项目
现在,我们已经创建了一个完整的 RESTful API,可以使用以下命令来运行项目:
node app.js
运行完毕后,我们可以在浏览器中访问 http://localhost:3000/documentation
来查看生成的 API 文档。
总结
在本文中,我们学习了如何使用 Fastify 和 MongoDB 构建一个简单的 RESTful API。我们创建了一个用户模型,并实现了创建、获取、更新和删除用户数据的路由。我们还使用了 fastify-cors
和 fastify-swagger
插件来增强 API 的功能和可读性。这些技术可以帮助我们快速构建高效、低开销的 Web 应用程序。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/656aaf53d2f5e1655d318a95