hapijs / glue

Server composer for hapi.js
Other
245 stars 62 forks source link

Add server.after hook in manifest #27

Closed simon-p-r closed 9 years ago

simon-p-r commented 9 years ago

Whilst using glue I thought it might be good if there was a hook in the manifest for server.after like there is for preConnections and prePlugins.

Thanks Simon

csrl commented 9 years ago

I'm not sure where you expect such a hook to exist. Every step currently has a hook.

-> compose() -> new Hapi.Server() -> preConnections() -> server.connection() -> prePlugins() -> server.register() -> callback()

Each step you have the ability to do what you want, and the server is passed in the callback. I see no place/need for a "server.after" hook.

simon-p-r commented 9 years ago

That's a shame as I think it will give you greater external control via the manifest to configure servers, hapi's mantra is configuration over code!

Marsup commented 9 years ago

server.after comes after glue gave you the server back, you do have a chance to register it before starting the server. That said glue could give a sugar property to spare you that call.

csrl commented 9 years ago

@simon-p-r feel free to provide an example of what you mean, or a pull request. I do not imagine what it is you want. Thanks.

simon-p-r commented 9 years ago

An example would be a server configured with some base features that users can write plugins for, my use case is I have a schema manager that can load schemas via plugins and after all plugins are loaded I call server.after to validate the schemas and can create database handles for them before hapi starts. However if I could pass function to manifest I can then configure based on different requirements. For example I may need to use a different database or no database at all.

csrl commented 9 years ago

@simon-p-r then as @Marsup said, you can just do:

glue.compose(manifest, function (err, server) {
  server.after(afterHandler);
  server.start();
});

If this was implemented in glue, then the above code would instead look like:

glue.compose(manifest, {preStart: afterHandler}, function (err, server) {
  server.start();
});

Can you explain what the benefit is to add the preStart option to glue.compose? (preStart implemented as passing the associated function to server.after)

simon-p-r commented 9 years ago

It just enables me to configure servers differently, I currently call server.after like you shown above however for testing it is better if I can compose based on configuration rather than code.

csrl commented 9 years ago

Could you provide code examples showing the configuration based use as you would like it?

lock[bot] commented 4 years ago

This thread has been automatically locked due to inactivity. Please open a new issue for related bugs or questions following the new issue template instructions.