我是Kotlin
和Ktor
的新手,以下内容在启动时工作正常,现在我需要添加更多Routes
,如何将路由拆分为多个文件?
package blog
import org.jetbrains.ktor.netty.*
import org.jetbrains.ktor.routing.*
import org.jetbrains.ktor.application.*
import org.jetbrains.ktor.features.*
import org.jetbrains.ktor.host.*
import org.jetbrains.ktor.http.*
import org.jetbrains.ktor.response.*
import org.jetbrains.ktor.request.* // for recieve
import org.jetbrains.ktor.util.* // for ValuesMap
import org.apache.commons.mail.*
fun Application.module() {
install(DefaultHeaders)
install(CallLogging)
install(Routing) {
get("/") {
call.respondText("""
My Example Blog2
<form action="/contact-us" method="post">
<input name="subject" placeholder="Subject">
<br>
<textarea name="message" placeholder="Your message ..."></textarea>
<br>
<button>Submit</button>
</form>
""", ContentType.Text.Html)
}
post("/contact-us") {
val post = call.receive<ValuesMap>()
SimpleEmail().apply {
setHostName("smtp.gmail.com")
setSmtpPort(465)
setAuthenticator(DefaultAuthenticator("[email protected]", "my_gmil_passoword"))
setSSLOnConnect(true)
setFrom("[email protected]")
setSubject(post["subject"])
setMsg(post["message"])
addTo("[email protected]")
}.send() // will throw email-exception if something is wrong
call.respondRedirect("/contact-us/success")
}
get("/contact-us/success") {
call.respondText("Your message was sent", ContentType.Text.Html)
}
}
}
fun main(args: Array<String>) {
embeddedServer(Netty, 8080, watchPaths = listOf("BlogAppKt"), module = Application::module).start()
}
最佳答案
终于我弄清楚了:
为所需的功能名称安装路由,例如:
install(Routing) {
contact()
}
创建一个类似于
fun Route.contact(){ ..}
的函数来处理必要条件,因此对于我的示例,我创建了以下代码:fun Route.contact(){
get("/") {
call.respondText("""
My Example Blog 12
<form action="/contact-us" method="post">
<input name="subject" placeholder="Subject">
<br>
<textarea name="message" placeholder="Your message ..."></textarea>
<br>
<button>Submit</button>
</form>
""", ContentType.Text.Html)
}
post("/contact-us") {
val post = call.receive<ValuesMap>() // val userId = registration["userId"]
SimpleEmail().apply {
setHostName("smtp.gmail.com")
setSmtpPort(465)
setAuthenticator(DefaultAuthenticator("[email protected]", "my_gmil_passoword"))
setSSLOnConnect(true)
setFrom("[email protected]")
setSubject(post["subject"])
setMsg(post["message"])
addTo("[email protected]")
}.send() // will throw email-exception if something is wrong
call.respondRedirect("/contact-us/success")
}
get"/contact-us/success") {
call.respondText("Your message was sent", ContentType.Text.Html)
}
}
关于kotlin - 将路线分为多个文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46390023/