I'm new to Kotlin
and Ktor
the below is working fine with me as startup, now I need to add more Routes
how can I split the routes in multiple files?
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()
}
Finally I figured it out:
Install routing for the functions name you need, like:
install(Routing) {
contact()
}
Create a function like fun Route.contact(){ ..}
to handle the requisites, so for my example, I created the below:
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)
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With