add getQuery method to Request
This commit is contained in:
parent
68e7e79428
commit
c733270df5
1 changed files with 54 additions and 0 deletions
|
@ -115,6 +115,60 @@ pub const Request = struct {
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Get query value by query key
|
||||||
|
pub fn getQuery(self: *Request, key_needle: []const u8) ?[]const u8 {
|
||||||
|
var query_string: ?[]const u8 = null;
|
||||||
|
if (self.method == .GET) {
|
||||||
|
var parts = std.mem.split(u8, self.uri, "?");
|
||||||
|
_ = parts.first();
|
||||||
|
query_string = parts.next();
|
||||||
|
}
|
||||||
|
if (self.method == .POST) {
|
||||||
|
query_string = self.body;
|
||||||
|
}
|
||||||
|
if (query_string == null) return null;
|
||||||
|
var pairs = std.mem.split(u8, query_string.?, "&");
|
||||||
|
var first_pair = pairs.first();
|
||||||
|
var items = std.mem.split(u8, first_pair, "=");
|
||||||
|
var key = items.first();
|
||||||
|
if (eql(u8, key_needle, key)) {
|
||||||
|
if (items.next()) |value| return value;
|
||||||
|
}
|
||||||
|
while (pairs.next()) |pair| {
|
||||||
|
items = std.mem.split(u8, pair, "=");
|
||||||
|
key = items.first();
|
||||||
|
if (eql(u8, key_needle, key)) {
|
||||||
|
if (items.next()) |value| return value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
test "get Query" {
|
||||||
|
var req: Request = undefined;
|
||||||
|
req.uri = "/about/?user=james&password=1234"; // Write query string in uri after '?'
|
||||||
|
req.method = .GET;
|
||||||
|
var user = if (req.getQuery("user")) |v| v else "";
|
||||||
|
var pwd = if (req.getQuery("password")) |v| v else "";
|
||||||
|
var n = req.getQuery("nothing"); // This key does not exist in query string
|
||||||
|
|
||||||
|
try std.testing.expect(eql(u8, user, "james"));
|
||||||
|
try std.testing.expect(eql(u8, pwd, "1234"));
|
||||||
|
try std.testing.expect(n == null);
|
||||||
|
|
||||||
|
// Change method an write query string into body
|
||||||
|
req.body = "user=james&password=1234";
|
||||||
|
req.method = .POST;
|
||||||
|
|
||||||
|
user = if (req.getQuery("user")) |v| v else "";
|
||||||
|
pwd = if (req.getQuery("password")) |v| v else "";
|
||||||
|
n = req.getQuery("nothing"); // This key does not exist in query string
|
||||||
|
|
||||||
|
try std.testing.expect(eql(u8, user, "james"));
|
||||||
|
try std.testing.expect(eql(u8, pwd, "1234"));
|
||||||
|
try std.testing.expect(n == null);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Represents a standard http-Response sent by the webapp (server).
|
/// Represents a standard http-Response sent by the webapp (server).
|
||||||
|
|
Loading…
Reference in a new issue