crossroadlabs / Express

Swift Express is a simple, yet unopinionated web application server written in Swift
GNU General Public License v3.0
848 stars 47 forks source link

What does request.query mean? #16

Open killev opened 8 years ago

killev commented 8 years ago

Hello guys, I'm testing the form's processing and it behaves wierd. my form:

<html>
<body>
<form method="POST" action = "/"><input name="param" type="text"/><input type="submit"/></form>
<br>
Submitted: {{submitted}}
</body>

</html>

My server code:

app.post("/") { (request:Request<AnyContent>)->Action<AnyContent> in
    print("Params:" ,request.params)
    print("Query:",  request.query)
    return Action<AnyContent>.render("index",context: ["submitted": ""])
}

app.get("/") { (request:Request<AnyContent>)->Action<AnyContent> in
    return Action<AnyContent>.render("index",context: ["submitted": ""])
}

The result is:

Merged: ["param": ["12345", "12345"]] Query: ["param": ["12345"]]

Seems like mergedQuery adds the same value twice??? Why?? What query and mergedQuery are expected to be then?

killev commented 8 years ago

However if add post parameters in form action like: <form method="POST" action = "/?param1=123456" >

the result seems to be logical: Merged: ["param1": ["123456"], "param": ["123456"]] Query: ["param1": ["123456"]]

Regards, Peter

killev commented 8 years ago

If parameters names are the same: <form method="POST" action = "/?param=123456"><input name="param" type="text"/><input type="submit"/></form> then also logical but inconvenient a bit as it's not clear where parameter come from: Merged: ["param": ["123456", "123456"]] Query: ["param": ["123456"]]

dileping commented 8 years ago

@killev Thanks for reporting. Will try to fix in the nearest version.

query should be just from the URL mergedQuery is both URL and body.

you can as well access just body data with request.body.asFormUrlEncoded()