Below is a simple node.js using express
var express = require('express');
var app = express();
app.get('/', function(req, res){
res.send('Hello World');
});
app.listen(3000);
I want to implement a plugin-in architecture, such as by default there is a folder called plugins
, and they register by themselve when the node.js startup, I don't need to modify the main server.js
an example a foo
plugin, e.g.
PluginManager.register("init, function(app) {
app.get('/foo', function(req, res){
res.send('Hello from foo plugin');
});
});
Then in my server.js
, I would have something like
// TODO: Scan all scripts under the folder `plugins`
// TODO: Execute all the `init` hook before the app.listen
app.listen(3000);
My problem is my plugin codes are all asynchronous , there is no way to block before the app.listen()
, do you have any idea for a better plugin-in architecture implementation?
Thanks.
Seems like whatever is loading the plugins would raise a callback like anything else.
PluginManager.loadPlugins(function() { app.listen(3000); });
This way the app wouldn't start listening until the plugins are all loaded.
You should block. It will only impact the "start time" of the application, not the "run time".
fs.readdirSync
to get all files in the plugins
directoryrequire()
them all (require
is synchronous)Server