diff --git a/src/jetzig/http/Request.zig b/src/jetzig/http/Request.zig index 23ed2c4..00b2051 100644 --- a/src/jetzig/http/Request.zig +++ b/src/jetzig/http/Request.zig @@ -258,7 +258,8 @@ fn queryParams(self: *Self) !*jetzig.data.Value { } fn parseQueryString(self: *Self) !bool { - if (self.path.query) |query| { + const data: ?[]const u8 = if (self.body.len > 0) self.body else self.path.query; + if (data) |query| { self.query.* = jetzig.http.Query.init( self.allocator, query, diff --git a/src/jetzig/http/Server.zig b/src/jetzig/http/Server.zig index 797e4f8..349d3f9 100644 --- a/src/jetzig/http/Server.zig +++ b/src/jetzig/http/Server.zig @@ -144,12 +144,18 @@ fn renderHTML( route: ?*jetzig.views.Route, ) !void { if (route) |matched_route| { - if (zmpl.find(matched_route.template)) |template| { - const rendered = self.renderView(matched_route, request, template) catch |err| { - if (isUnhandledError(err)) return err; - const rendered_error = try self.renderInternalServerError(request, err); - return request.setResponse(rendered_error, .{}); - }; + const template = zmpl.find(matched_route.template); + if (template == null) { + if (try self.renderMarkdown(request, route)) |rendered_markdown| { + return request.setResponse(rendered_markdown, .{}); + } + } + const rendered = self.renderView(matched_route, request, template) catch |err| { + if (isUnhandledError(err)) return err; + const rendered_error = try self.renderInternalServerError(request, err); + return request.setResponse(rendered_error, .{}); + }; + if (request.status_code != .not_found) { return request.setResponse(rendered, .{}); } } @@ -265,8 +271,10 @@ fn renderView( .content = try self.renderTemplateWithLayout(request, capture, rendered_view, route), }; } else { - // We are rendering JSON, content is the result of `toJson` on view data. - return .{ .view = rendered_view, .content = "" }; + return switch (request.requestFormat()) { + .HTML, .UNKNOWN => try renderNotFound(request), + .JSON => .{ .view = rendered_view, .content = "" }, + }; } } else { try self.logger.WARN("`request.render` was not invoked. Rendering empty content.", .{});