在呈现响应时查找 nill
Find nill on rendering a response
我正在使用 Stencil。在下面的方法中失败,因为标记的行返回 nil。这直接来自 Paul Hudson 的 Kitura 书(第 208 页)。我有模板文件,一切看起来都很酷。
我导入了 KituraStencil 添加了模板引擎 (router.add(templateEngine: StencilTemplateEngine()))。我在我的“/”路线中使用了相同的功能,它工作得很好。
HeliumLogger 仅报告..[2017-01-02T05:17:45.534Z] [VERBOSE] [HTTPIncomingMessage.swift:335 onHeadersComplete(method:versionMajor:versionMinor:)] HTTP request from=172.17.0.1; proto=http;
有从哪里开始的想法吗?
router.get("/forum/:forumid") {
request, response, next in
guard let forumID = request.parameters["forumid"] else {
send(error: "Missing forum ID", code: .badRequest, to: response)
return
}
database.retrieve(forumID) { forum, error in
if let error = error {
send(error: error.localizedDescription, code: .notFound, to: response)
} else if let forum = forum {
database.queryByView("forum_posts", ofDesign: "forum", usingParameters: [.keys([forumID as Database.KeyType]), .descending(true)]) { messages, error in
defer { next() }
if let error = error {
send(error: error.localizedDescription, code: .internalServerError, to: response)
} else if let messages = messages {
var pageContext = context(for: request)
pageContext["forum_id"] = forum["_id"].stringValue
pageContext["forum_name"] = forum["name"].stringValue
pageContext["messages"] = messages["rows"].arrayObject
//THIS LINE RETURNS Nil
_ = try? response.render("forum", context: pageContext)
}
}
}
}
}
您必须将 StencilTemplateEngine
添加到您的路由器。例如:
import KituraStencil
router.setDefault(templateEngine: StencilTemplateEngine())
或
import KituraStencil
router.add(templateEngine: StencilTemplateEngine())
我正在使用 Stencil。在下面的方法中失败,因为标记的行返回 nil。这直接来自 Paul Hudson 的 Kitura 书(第 208 页)。我有模板文件,一切看起来都很酷。
我导入了 KituraStencil 添加了模板引擎 (router.add(templateEngine: StencilTemplateEngine()))。我在我的“/”路线中使用了相同的功能,它工作得很好。
HeliumLogger 仅报告..[2017-01-02T05:17:45.534Z] [VERBOSE] [HTTPIncomingMessage.swift:335 onHeadersComplete(method:versionMajor:versionMinor:)] HTTP request from=172.17.0.1; proto=http;
有从哪里开始的想法吗?
router.get("/forum/:forumid") {
request, response, next in
guard let forumID = request.parameters["forumid"] else {
send(error: "Missing forum ID", code: .badRequest, to: response)
return
}
database.retrieve(forumID) { forum, error in
if let error = error {
send(error: error.localizedDescription, code: .notFound, to: response)
} else if let forum = forum {
database.queryByView("forum_posts", ofDesign: "forum", usingParameters: [.keys([forumID as Database.KeyType]), .descending(true)]) { messages, error in
defer { next() }
if let error = error {
send(error: error.localizedDescription, code: .internalServerError, to: response)
} else if let messages = messages {
var pageContext = context(for: request)
pageContext["forum_id"] = forum["_id"].stringValue
pageContext["forum_name"] = forum["name"].stringValue
pageContext["messages"] = messages["rows"].arrayObject
//THIS LINE RETURNS Nil
_ = try? response.render("forum", context: pageContext)
}
}
}
}
}
您必须将 StencilTemplateEngine
添加到您的路由器。例如:
import KituraStencil
router.setDefault(templateEngine: StencilTemplateEngine())
或
import KituraStencil
router.add(templateEngine: StencilTemplateEngine())