首页 >web前端 >js教程 >解锁后端简单性:使用 Convex 构建可扩展的应用程序

解锁后端简单性:使用 Convex 构建可扩展的应用程序

Linda Hamilton
Linda Hamilton原创
2024-12-14 21:40:11496浏览

构建可扩展、高效的应用程序可能具有挑战性,对吧?特别是你的时间较少或参加黑客马拉松。如果我告诉你有一个后端解决方案可以简化这个过程怎么办?

最近我正在做一个项目,我第一次使用了 Convex 后端,你猜怎么着,感觉简直太棒了。

Convex 不仅仅是一个数据库;它是为现代开发人员量身定制的全面后端解决方案。它提供从 TypeScript 中的云功能到实时数据同步的一切,使您能够完全专注于前端代码。这使其越来越受欢迎。

是什么让它与众不同?

  • 实时数据同步: 我最喜欢它的最令人惊奇的功能是,实时数据同步意味着需要忙于设置套接字 io,然后将其从后端发送到前端。相反,数据在客户端应用程序和数据库之间实时同步,使其成为协作或实时应用程序的理想选择。
  • 无服务器函数: Convex 提供无服务器函数,称为“Convex 函数”,它允许您在不管理服务器的情况下运行后端逻辑。这些函数是用 JavaScript 或 TypeScript 编写的。
  • 内置身份验证: 虽然有像 clerk、next auth 这样的服务可以与 Next.js typescript 配合使用,但 Convex 还支持用户身份验证,包括第三方提供商,因此您可以轻松地将用户登录添加到应用程序,而无需设置自定义身份验证系统。
  • 可扩展数据库: Convex 的数据库可自动扩展,旨在支持高并发,因此可以处理大型数据集和流量高峰。
  • 无模式数据模型: Convex 使用无模式数据模型,允许您存储灵活的数据结构,这有利于快速发展的项目。

这些是我个人使用的功能,还有更多功能,例如 ACID 事务TypeScript 支持安全和访问控制自动缓存和优化,你绝对可以尝试。

现在让我们看看通过简单的 getGroupMembers 函数在普通后端和凸后端中的方法是如何的。

让我们使用 MongoDB 和 Node.js 构建一个后端函数

  • 首先,我们首先通过典型的 JWT 验证用户的身份,对于错误,我们只返回 401 未经授权的响应。
  const identity = await verifyToken(req.headers.authorization);
  if (!identity) {
    res.status(401).send("Unauthorized");
    return;
  }

  • 用户通过身份验证后,我们将检索对话详细信息。此步骤涉及通过提供的对话 ID 查询 MongoDB 中的对话集合。
  const conversation = await db.collection("conversations").findOne({ _id: conversationId });
  if (!conversation) {
    res.status(404).send("Conversation not found");
    return;
  }

  • 接下来,我们从用户集合中检索所有用户,并筛选 I​​D 与对话参与者匹配的用户。
  const users = await db.collection("users").find().toArray();
  const groupMembers = users.filter(user => conversation.participants.includes(user._id));

  • 最后,我们将groupMembers列表返回给客户端。此数据仅包括参与指定对话的用户。
  res.status(200).send(groupMembers);

这是上述代码片段的表示图

Unlocking Backend Simplicity: Building Scalable Apps with Convex

让我们使用 Convex 构建一个后端函数

  • Convex 通过 ctx.auth.getUserIdentity() 提供内置的用户身份验证,可以轻松检查用户是否登录。如果用户未通过身份验证,我们会抛出 ConvexError,它会自动返回“Unauthorized”对客户的回应。
  const identity = await ctx.auth.getUserIdentity();
  if (!identity) {
    throw new ConvexError("Unauthorized");
  }

  • 使用 Convex,可以简化数据库查询。使用 ctx.db.query,我们通过过滤与提供的对话 ID 的匹配来检索对话。
  const conversation = await ctx.db.query("conversations")
    .filter((q) => q.eq(q.field("_id"), args.conversationId))
    .first();
  if (!conversation) {
    throw new ConvexError("Conversation not found");
  }

  • Convex 允许我们使用 ctx.db.query("users").collect() 查询所有用户。然后,我们使用过滤器仅选择参与对话的用户。 Convex 的内置数据检索方法使管理集合变得更容易,而无需手动处理数据库连接。
  const users = await ctx.db.query("users").collect();
  const groupMembers = users.filter((user) => conversation.participants.includes(user._id));

  • 仅此而已。由于 Convex 处理响应管理,因此只需从函数返回 groupMembers 即可将数据发送到客户端。
  return groupMembers;

这是凸面如何处理后端的整体简化解释图 -

Unlocking Backend Simplicity: Building Scalable Apps with Convex

我如何在我的项目中使用 Convex

我刚刚使用 Next.js、TypeScript 以及最重要的 Convex 后端重新创建了 freeCodeCamp MERN stack Book Store 项目。

所以,如果您想了解如何使用 Convex 后端,那么您可以关注我的 github 项目,我已将我的技术堆栈从 MERN 堆栈转移到 NEXT.js TS Convex。

  • ???-?????? (?????????) - 在这里查看

  • ???-??????_?????? (????.?? ?? ??????) - 在这里查看

如果您愿意,您还可以访问我的 LinkedIn 帖子关于此?。

结论

简而言之,在传统的后端设置中,您需要手动处理身份验证、数据库连接、查询和错误,从而导致代码更加复杂和冗长。在 Convex 中,这些任务被抽象化,用最少的代码简化了身份验证、数据库查询和错误管理,从而实现更快的开发和更干净的代码。

快乐学习☺☺!!

以上是解锁后端简单性:使用 Convex 构建可扩展的应用程序的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn