swift - Swift 简单的 Kitura 应用程序 localhost 没有运行?
问题描述
第一篇文章!
我是一名学习迅速的学生,我正在上一个相当大的速成课程。上次我的教授开始教我们如何做简单的获取和发布请求,但我仍在追赶,很明显还没有掌握一些基础知识。
这是我第一次使用 Kitura,也是第二次使用 Swift 编码。出于某种原因,当我使用时swift run
,我得到了我的打印结果和一个突然的“程序以退出代码结束:0”,而不是在我的 8080 端口上运行一个 localhost 来验证我的 get 响应localhost:8080/
。
有人可以帮我弄清楚我没有看到什么吗?还是不了解服务器端 swift 和命令行?
print("Hello, world from Swift Main!")
import Kitura
//constant router
let router = Router()
//When the router gets a request (contains everything needed to interpret the request), the server will respond with (Hello World or whatever data)
router.get("/") { request, response, next in
response.send("Hello world from router.get") //response
next() //either end the route or go on to the next one
}
//What port for the server to run on
Kitura.addHTTPServer(onPort: 8080, with: router)
//Need to add routes before run(), either in different file or on main
Kitura.run()
谢谢!
解决方案
您提供的代码是正确的,因此可能是您的项目结构不正确。
为了正确创建项目,您可以按照以下步骤操作:
1. 创建一个新目录,例如jamie
.
2. 从该目录运行swift package init --type=executable
以创建一个新项目。该项目将jamie
在目录名称之后调用。
3. 编辑Sources/jamie/main.swift
并添加您的代码。
4. 编辑Package.swift
并将以下内容添加到“Jamie”包的依赖项中:
.package(url: "https://github.com/IBM-Swift/Kitura.git", .upToNextMajor(from: "2.5.0")),
.
5. 编辑Package.swift
并添加“jamie”目标的依赖项列表:
dependencies: ["Kitura"]),
然后应该可以正确运行。如果没有,可能是因为您尝试使用的端口已在使用中。如果您将记录器添加到您的项目,如果 Kitura 无法绑定到端口,它将记录错误消息。为此,请按照以下步骤操作:
- 编辑
Package.swift
并将以下内容添加到“Jamie”包的依赖项中:
.package(url: "https://github.com/IBM-Swift/HeliumLogger.git", .upToNextMinor(from: "1.7.1")),
. - 编辑
Package.swift
记录器并将其添加到“jamie”目标的依赖项列表中,使其变为:
dependencies: ["Kitura", HeliumLogger"])
, 编辑
Sources/jamie/main.swift
并将以下内容添加到文件顶部:import LoggerAPI import HeliumLogger HeliumLogger.use(LoggerMessageType.info)
如果端口已在使用中,您将收到类似于以下内容的消息:
[2019-02-17T12:01:40.723Z] [ERROR] [Kitura.swift:139 start()] Error listening on port 8080: Error code: -9992(0x-2708), Address already in use. Use server.failed(callback:) to handle
如果您还没有加入 Kitura slack 组织,可能值得加入http://slack.kitura.io
推荐阅读
- javascript - 如何向 Feed 和可查看的 Profile ReactJS 提交信息
- wcf - Shopify 与 Newtonsoft (JSON.NET) 问题
- ios - 如何在快速日期字符串中使用破折号(“-”)?
- javascript - JS React Native / Expo 中的可选要求
- arrays - 列中当前值的计数
- javascript - 如何防止 jQuery click 事件同时在多个元素上触发?
- javascript - 剑道参数映射返回未定义
- ios - 使用 VNRectangleObservation 裁剪 UIImage
- python - 如何在 Beautifulsoup 4 中检索包含特定文本的 href?
- python - 只是想比较一个项目但得到一个 UndefinedVariableError