当前位置: 首页 > 面试题库 >

如何通过使用相同的端口地址和不同的句柄模式来服务网页和API路由

王成化
2023-03-14
问题内容

我有一个带有CRUD操作的简单Web应用程序,我想使用相同的端口地址和不同的Handle模式来提供网页和API路由。如下,

fs := http.FileServer(http.Dir("server/webapps/play_maths"))
http.Handle("/", fs)

http.Handle("/api", call API routes)

以下是我的API路线

func UserRoutes() *mux.Router  {
    var router = mux.NewRouter()
    router = mux.NewRouter().StrictSlash(true)
    router.HandleFunc("/user/create", api.CreateUser)
    router.HandleFunc("/user/get/all", api.GetAllUsers)
    return router
}

问题答案:

net/http开箱即用的软件包支持此功能。引用自http.ServeMux

模式命名固定的,有根的路径(例如“ /favicon.ico”)或有根的子树(例如“ / images /”)(请注意结尾的斜杠)。
较长的模式优先于较短的模式 ,因此,如果同时为“ / images /”和“ / images / thumbnails
/”注册了处理程序,则将为以“ / images / thumbnails /”开头的路径调用后一个处理程序将在“ / images
/”子树中接收对任何其他路径的请求。


因此,只需将文件处理程序注册到path
/,然后将API处理程序注册到例如/api/path即可。在这种情况下,任何以开头的请求/api/都将定向到API处理程序,而其他任何请求都将定向到文件处理程序。

请注意,这当然意味着如果文件/api/夹中有文件(或更具体地说,其请求路径以开头/api/),则由于上述原因,将无法访问这些文件。



 类似资料:
  • (这个问题可能被问了一千遍,但我没有弄清楚。) 假设我有以下代码段: 现在,我可以使用相同的地址和端口来接受传入连接和连接到地址吗?如果可以的话,怎么办?如果没有,为什么不呢?根据这篇文章,端口可以共享,所以这应该不是问题。 它是如何工作的?

  • 我已经在端口8180上使用以下命令启动了dockerze密钥斗篷: 作为管理员,我创建了两个领域(在同一个keyclock实例中): 租户1 银 在Tenant1中,我定义了一个连接到Angular应用程序(它可以工作)和GITHUB身份提供者(它也可以工作)的客户端(public) 在Silver Realm中,我将客户端“silverBroker”定义为机密...连接到 Angular 应用程

  • 让我们假设一个后端应用程序,它公开了一些Rest API,运行在地址192.168.1.10:8889的Jetty网络服务器上。 我希望有一个前端应用程序(仅限于html/javascript,在apache2 Web服务器上)在相同的IP上运行,但在不同的端口(例如8000)上运行,它应该使用后端应用程序公开的API。 我怎样才能让这个架构工作而不进入“No'Access-Control-All

  • 另外,两个应用程序不能在一台机器上使用相同的端口,那么当两个不同的服务器具有相同的端口,而一台机器需要通过两个不同的应用程序连接到这两个服务器时会发生什么呢?

  • 我使用python中的套接字设置了一个客户机和一个服务器,客户机向服务器发送数据,服务器执行操作,然后向客户机返回一些数据。最初,客户端和服务器将具有相同的端口号(9999)。我目前的问题是,我必须将服务器端口更改为19999,当我试图运行时,它无法工作。客户端能够发送数据,如果它的端口也更改为19999,但它不工作,如果客户端是9999和服务器是19999,这是我需要的。新的网络系统,所以将感谢

  • 我想编写一个tcp服务器和客户端应用程序,在客户端使用相同端口号的情况下,它们之间有几个不同的连接。 据我所知,服务器有一个侦听器端口,当客户端调用它时,我会在服务器端为这个新连接获得一个新的套接字,当我调用它时 正当所以在服务器端,我可以识别我与这个新套接字的连接,并通过它发送数据。 现在,我的理解与客户端的问题。我打电话的时候会拿到插座 所以我只有一个插座。在 我可以指定远程地址等等。所以当我