Thank you! Inline replies >>>
On Sunday, 10 March 2024 at 21:04:05 UTC, aberba wrote:
> 1) I'm not sure I like concat (~=)
style used on `Output output` and how it can determine the order routes are invoked. I would expect that to be explicitly defined by Dev using a catch-all route or else the sever returns 404 by default. That's going to prevent the chances of invoking the wrong route especially when it does something important/dangerous/unexpected.
Serverino works with priorities, that's the order the handlers are called! You're checks on handlers can easily filter request.
>
-
instead of doing:
if (request.method != Request.Method.Get)
output.status = 405;
to determine the request method, why not use a UDA similar to @route
...like @method(Request.Method.post)
? The use of UDA is so much cleaner and easier to deal with.
This works as well, indeed:
@route!(r => r.method == Request.Method.Post)
>
- would be nice to have an
output.json()
function which both sets the response header and also calls output.write()
Just add content type and you're done!
>
- I can't build anything significant in any http server library without support for middleware. Preferably support for multiple middlewares functions. A middleware would be a function that runs after the @onServerInit but BEFORE any route handler. It will be used to intercept all incoming requests for things like authentication, rate limiting, CORS, etc. Preferably provide a way to pass data to the target route e.g. user session, user permission, etc...like output.locals.set("userId", 123). The route will then be able to access this data.
Just use a high priority handler, check the tips on website, for example user auth.
That's a very clean way to add a layer of Auth, logging and so on...
> All in all, everything else looks good. I would prefer something like:
```d
void hello (Request req, Response res) {
res.write("hello");
}
```
...but `Output` is also fine... just a small nitpick.
output.write() works as well.
Andrea