在Perfect 2.0样板应用程序(PerfectTemplate)中重构路线

我在网上看到的所有示例在路由和处理请求时都具有相同的样板结构,看起来有点像这样

 导入PerfectLib 
导入PerfectHTTP
导入PerfectHTTPServer
  //创建HTTP服务器。 
让服务器= HTTPServer()
  //注册自己的路由和处理程序 
var route = Routes()
route.add(方法:.get,uri:“ /”,处理程序:{
请求,回应
response.setHeader(.contentType,值:“ text / html”)
response.appendBody(string:“ 你好,世界! 你好,世界! ”)
response.completed()
}
  //将路由添加到服务器。 
server.addRoutes(路线)
...

并继续进行服务器设置,配置和启动顺序的设置。

我目前是一名PHP开发人员,试图切换到Swift进行后端开发,并且在同一文件中包含路由,闭包和可能的业务逻辑有点不安。

修复非常容易,我决定共享它,以防万一其他人遇到相同的问题,所以让我们开始编码吧……

提取路线

首先创建一个新文件,将其命名为AppRoutes.swift ,并将其放置在与main.swiftarguments.swift相同的位置。 打开新文件后,将目标会员身份更改为仅检查您的应用-应该看起来像这样……

接下来,我们将删除导入Foundation行,并添加自己的导入PerfectHTTP并将路由位从main.swift提取到一个函数中,我们将其称为setupAppRoutes 。 代码现在应该看起来像这样……

 导入PerfectHTTP 
  func setupAppRoutes()->路由{ 
var route = Routes()
route.add(方法:.get,uri:“ /”,处理程序:{
请求,回应
response.setHeader(.contentType,值:“ text / html”)
response.appendBody(string:“ 你好,世界! 你好,世界! ”)
response.completed()
}


回程路线
}

该函数将保留我们所有的应用程序路由,并将它们添加到Routes对象后返回它们。 提取将使我们的main.swift现在看起来像这样:

 导入PerfectLib 
导入PerfectHTTP
导入PerfectHTTPServer
  //创建HTTP服务器。 
让服务器= HTTPServer()
  //注册自己的路由和处理程序 
var route = setupAppRoutes()
  //将路由添加到服务器。 
server.addRoutes(路线)

好多了,但仍然不够完美(无双关语)。 现在我们将路线分开了,但是业务逻辑仍然存在于我们的路线文件中—是时候提取更多了……

提取业务逻辑

创建一个新文件,将其命名为homeHandler.swift 。 遵循相同的规则,在“ 目标成员身份”中检查您的应用程序名称,然后取消选中PerfectLib ,删除导入Foundation行并将其替换为import PerfectHTTP

创建一个新函数,将其命名homeHandler ,它将把request:HTTPRequestresponse:HTTPResponse作为参数,并且没有返回值/类型。

新功能的主体应由路线闭合中的业务逻辑组成(请参见下面的选定行)。

您的新文件现在应该像这样…

  // 
// homeHandler.swift
// SwiftRouting
//
//
//
 导入PerfectHTTP 
 func homeHandler(request:HTTPRequest,response:HTTPResponse){ 
response.setHeader(.contentType,值:“ text / html”)
response.appendBody(string:“ 你好,世界! 你好,世界! ”)
response.completed()
}

…现在,我们应该返回并更改路由文件,以便它将使用新创建的处理程序。 由于我们提取了整个闭包,因此新的路由声明将如下所示:

  routes.add(方法:.get,uri:“ /”,处理程序:homeHandler) 

…以及整个文件,如下所示:

好吧,我们已经完成了重构工作,未来的路线将遵循相同的做法,并且随着项目的发展,我们在项目中将拥有清晰的结构。

测试变更

最后,让我们测试一下,看看我们是否引入了任何错误或错误。 在控制台中构建项目,或者根据需要在Xcode中运行它,然后对显示的本地URL运行curl命令,或者在首选的浏览器中打开它。 您应该看到homeHandler函数输出的文本 Hello,world! Hello,world!

玩得开心,继续编码,
罗伯特·B