在GraphQL中连接MongoDB数据库
GraphQL是一种查询语言和运行时环境,用于API开发。它允许客户端准确地说明其数据需求,从而最大程度地减少了数据传输量。MongoDB是一种面向文档的NoSQL数据库,它与GraphQL结合使用可以使我们轻松构建高效的API服务。在本文中,我们将介绍如何在GraphQL中连接MongoDB数据库。
安装必要的软件包
我们需要在项目中安装一些必要的软件包才能使用GraphQL和MongoDB。我们可以使用npm来安装这些软件包。首先,我们需要在项目目录下打开终端并运行以下命令来初始化npm项目:
npm init -y
然后,我们需要安装以下软件包:
- graphql:用于定义GraphQL schema和resolver。
- graphql-tools:用于将GraphQL schema与resolver结合起来。
- mongoose:用于连接MongoDB数据库。
- express:用于生成HTTP server。
- graphql-express:用于将GraphQL endpoint添加到HTTP server中。
运行以下命令来安装这些软件包:
npm install graphql graphql-tools mongoose express graphql-express
连接MongoDB数据库
我们需要连接MongoDB数据库来获取或修改数据。为此,在我们的代码中,我们需要提供MongoDB数据库连接URL和数据库名称,并通过mongoose连接到它。在以下示例中,我们将MongoDB数据库连接URL保留为空,并通过环境变量设置它。在实际应用中,我们应该为生产环境和测试环境设置不同的连接URL。
-- -------------------- ---- ------- ----- -------- - -------------------- ---------------- - --------------- ----- ------------ - ----- ----- --- -- - --- - ----- --------------------- - ---------------- ----- ------------------- ----- ------- --- --- -------------------- --------- ------------ -- ----- ----------- - ----- ----- - -------------------- ---------- --------------- ----------------- - -- ----- ----- - ------------------ -- ---------------------------- ----- ------ - ------------------- -- ------------------ ------------------- -----------------------------
定义GraphQL schema
GraphQL schema用于定义可查询的字段和数据类型以及它们之间的关联。在以下示例中,我们定义了一个Post数据类型,该类型包含_id、title、content和published字段。我们还定义了一些可查询的字段,例如getPost和getPosts。这些查询将在后面的步骤中定义其解析器。
-- -------------------- ---- ------- ----- - --- - - --------------------------------- ----- -------- - ---- ---- ----- - ----------- ----- ---- --------- ------ - ---- ---- - ---- --- ------ ------- -------- ------- ---------- -------- - ----- --------- - ------ ------- -------- ------- ---------- -------- - -- -------------- - ---------
定义GraphQL resolver
GraphQL resolver用于定义可查询字段的逻辑。在以下示例中,我们定义了getPost和getPosts查询的解析程序。getPost查询将根据提供的ID返回单个Post。getPosts查询将返回所有的Post。
-- -------------------- ---- ------- ----- - ------ - - ---------------- ----- ---- - ------------ ----- --------- - - ------ - -------- ----- --- - -- -- -- - --- - ----- ---- - ----- ------------------ ------ ----- - ----- ----- - ------ ---- - -- --------- ----- -- -- - --- - ----- ----- - ----- ------------ ------ ------ - ----- ----- - ------ ---- - -- -- -- -------------- - ----------
将GraphQL schema与resolver结合起来
我们使用graphql-tools软件包将GraphQL schema和resolver结合在一起。在以下示例中,我们将typeDefs和resolvers导入makeExecutableSchema函数中,该函数将它们组合成一个可执行的GraphQL schema。
-- -------------------- ---- ------- ----- - -------------------- - - ------------------------- ----- -------- - ---------------------- ----- --------- - ----------------------- ----- ------ - ---------------------- --------- ---------- --- -------------- - -------
将GraphQL endpoint添加到HTTP server
我们需要将GraphQL endpoint添加到HTTP server中。在以下示例中,我们使用express和graphql-express软件包来定义GraphQL endpoint(/graphql)和HTTP server。我们将GraphQL schema作为参数传递给graphql-express中间件,并将该中间件添加到HTTP server中。
-- -------------------- ---- ------- ----- ------- - ------------------- ----- - -------------- - - ---------------------------------- ----- ------ - -------------------- ----- ---- - ---------------- -- ----- ----- --- - ---------- -------- ----------- ---------------- ------- -- -- ---------------- -- -- - -------------------- ------ --------- -- ---- ---------- ---
测试GraphQL endpoint
现在我们已经完成了连接MongoDB数据库和定义GraphQL endpoint所需的所有步骤。让我们通过以下查询测试GraphQL endpoint是否正常工作:
{ getPosts { _id title } }
如果一切正常,该查询将返回所有的Post中的_id和title字段。
结论
在本文中,我们介绍了如何在简单的GraphQL server中连接MongoDB数据库。我们讨论了必要的软件包并提供了示例代码。我们可以使用这个基本的GraphQL server与MongoDB集成,以构建更复杂的API服务。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67300a0feedcc8a97c90e8d0