我已经设置了一个玩具Vapor服务器,当GET请求发送到/nodes
时,它只会吐出几个IP地址的列表。我用curl和Postman测试它,它按预期工作。
我认为另一个Vapor服务器在启动时ping第一个端点。但是,当请求来自此Vapor客户端而不是Postman或curl时,服务器在尝试查询节点时会抛出此错误。
[ ERROR ] SQLiteError.error: no such table: nodes (SQLiteQuery.swift:91).
我在SQLiteQuery.swift
中确认在两种情况下生成的原始查询都是相同的。我无法理解为什么它在一个案例中起作用而在另一个案例中起作用。
/** Server */
func index(_ req: Request) throws -> Future<[Node]> {
return Node.query(on: req).all()
}
/** Client */
func fetchNetworkPeersFromHub(in container: Container) throws -> Future<[Peer]> {
return try container.client().send(.GET, to: "http://localhost:3000/nodes").flatMap({ response in
return try response.content.decode([Peer].self)
})
}
请求对象是唯一的区别,请求容器只是作为参数传递以访问其事件循环。标题和其他参数不应该只对数据库中的所有节点进行任何影响。
有人可以提供有关如何调试的建议吗?
GET /nodes HTTP/1.1
cache-control: no-cache
Postman-Token: 2fcc907e-a334-4edd-b445-a05a29e5a15f
User-Agent: PostmanRuntime/7.1.1
Accept: */*
Host: localhost:3000
accept-encoding: gzip, deflate
Connection: keep-alive
<no body>
GET /nodes HTTP/1.1
Host: localhost:3000
Connection: keep-alive
Accept: */*
User-Agent: Run (unknown version) CFNetwork/902 Darwin/17.7.0 (x86_64)
Accept-Language: en-us
Content-Length: 0
Accept-Encoding: gzip, deflate
<no body>