当前位置: 首页 > 知识库问答 >
问题:

Vertx Web:如何跨多个文件拆分和组织路由?

冉高寒
2023-03-14

到目前为止,我真的很喜欢Vertx。文档很棒,跨语言支持也很棒。

然而,我的特定问题的示例和留档似乎都已经过时了。我猜自3.4. x以来,API已经发生了一些变化(我目前正在使用3.9.1和Scala2.13.1

我希望能够在多个文件中分割我的路线,以保持事情的有序性。例如,我希望有一个用户路由文件,并为TodoRoutes创建一个单独的文件,这两个文件都可以在我的ServerVerticle中使用。

我发现的唯一方法基本上是:

用户路由:

object UserRoutes {
    def createUser(context: RoutingContext): Unit = {
        // do work
    }
    def login(context: RoutingContext): Unit = {
        // do work
    }
}

服务器垂直:

class ServerVerticle(vertx: Vertx) extends AbstractVerticle {
    override def start(): Unit = {
        val router: Router = Router.router(vertx)

        router.post("/user/new").handle(UserRoutes.createUser)
        router.post("/user/login").handle(UserRoutes.login)
        ....
    }
}

我真正想做的是:

object UserRoutes {
    // somehow get a reference to `router` or create a new one
    router.post("/user/new", (context: RoutingContext) => {
        // do work
    })
    router.post("/user/login", (context: RoutingContext) => {
        // do work
    })
}

我之所以喜欢这样做,是因为这样可以更容易地看到用户路由中正在执行的操作,例如使用的路径、需要的参数等。

我尝试对这个示例应用程序采用类似的方法,但显然这在Vertx API中是不可能的,因为它存在于3.9中?

最好的方法是什么?我错过了什么?大型REST API如何分解它们的路由?

共有1个答案

吕永寿
2023-03-14

我想这样做的一种方法是如下所示:

用户路由

class UserRoutes(vertx: Vertx) {
  val router: Router = {
    val router = Router.router(vertx)

    router.get("/users/login").handler(context => {
      // do work
    })

    router
  }
}

然后在ServerVerticle中:

...
server
    .requestHandler(new UserVerticle(vertx).router)
    .requestHandler(new TodoVerticle(vertx).router)
    .listen(...)

这可以很好地分解内容,但我仍然需要找到一种体面的方法,避免重复每个路由文件中的cors选项和内容。当然,有很多方法可以做到这一点,但问题仍然存在:这是正确的方法吗?

此外,我真的可以混合最初问题中概述的方法的某些部分。UserRoutes类仍然可以具有createUser()方法,我可以简单地在中使用它应用()调用或其他地方。

子路由器是另一种方法,但仍然存在一些问题。

如果每个\uuuu路由文件都可以创建自己的垂直链接,那就太好了。如果每一组路由都在自己的线程上运行,这可以很好地加快速度。

说实话...在Scala中,总是有太多的方法来解决这个问题。但是当我们想要的时候,哪一个是最好的:

  • 逻辑组织

我需要指导!有这么多选择,我不知道从哪里开始。

编辑:也许最好避免将每组路线指定给垂直线,而让vertx来做这件事?

 类似资料:
  • 问题内容: 我有以下代码: 我将有许多服务(如一项服务),并且我不想将它们全部放在同一个文件中。 我在Stack Overflow中读了另一个问题,我可能需要这样的其他文件:在该文件中写入所有服务,但是当我启动Node时会抛出该错误。 如何分隔代码? 问题答案: 您可以在不同的文件(例如 test-routes.js)中 定义路由,如下所示: 现在在您的主文件中说出 server.js, 您可以像

  • 问题内容: 我有一个几分钟的.wav文件,我想分割成10秒的另一个.wav文件。 到目前为止,这是我的python代码: 印刷产量: 我知道这是框架列表。我如何为该列表中的每个元素制作一个wav文件(第一个.wav文件将是?Python的模块尚不清楚如何使用框架创建.wav文件。 编辑:这是一个重复的问题,如何在python中将音频文件(wav格式)拼接为1秒拼接? 但是,如果某人的答案不需要,我

  • 问题内容: 我得到一个包含以下内容的文本文件(12 MB): 有什么办法来分流到12个* .txt文件让说,,(......)? 问题答案: 您可以使用linux bash核心实用程序 注意,或两者都OK,但大小不同。MB为1000 * 1000,M为1024 ^ 2 如果要按行分隔,可以使用参数。 更新 Kirill建议的另一种解决方案,您可以执行以下操作 请注意,是不是,有几个选项,比如,,,

  • 问题内容: 我的Android应用程序中有以下字符串: 我需要操纵字符串并为该输出分割字符串: 我需要始终取字符串的最后一个元素。 如何在Java中输出此内容? 我非常感谢您在解决此问题方面可以给我的任何帮助。 问题答案: 另一种可能性:

  • 问题内容: 我有从mongodb导出的json文件,如下所示: 大约有30000行,我想将每一行拆分成自己的文件。 (我正在尝试将我的数据转移到榻榻米群集上) 我尝试这样做: 但是我发现它似乎减少了行的负载,而当我期望30000个奇数时,运行此命令的输出仅给了我50个奇数文件! 有没有一种逻辑方法可以使此操作不使用任何适合的方法删除任何数据? 问题答案: 假设您不在乎确切的文件名,如果要将输入拆分

  • 问题内容: 将Spring的配置拆分为多个xml文件的正确方法是什么? 此刻我有 /WEB-INF/foo-servlet.xml /WEB-INF/foo-service.xml /WEB-INF/foo-persistence.xml 我有以下内容: 实际问题: 这种方法正确/最佳吗? 我真的需要同时指定中的配置位置 和该板块? 我需要记住什么才能能够引用中定义的?这与 指定有关吗? 更新1: