6

下面是一个使用 express 的简单 node.js

var express = require('express');
var app = express();

app.get('/', function(req, res){
  res.send('Hello World');
});

app.listen(3000);

我想实现一个插件式的架构,比如默认有一个叫 的文件夹plugins,在node.js启动的时候自己注册,我不需要修改mainserver.js

一个foo插件的例子,例如

PluginManager.register("init, function(app) {
    app.get('/foo', function(req, res){
        res.send('Hello from foo plugin');
    });
});

然后在我的server.js,我会有类似的东西

// TODO: Scan all scripts under the folder `plugins`
// TODO: Execute all the `init` hook before the app.listen
app.listen(3000);

我的问题是我的插件代码都是异步的,没有办法在之前阻塞app.listen(),你有更好的插件架构实现的想法吗?

谢谢。

4

2 回答 2

3

似乎加载插件的任何东西都会像其他任何东西一样引发回调。

PluginManager.loadPlugins(function() { app.listen(3000); });

这样,应用程序在插件全部加载之前不会开始监听。

于 2012-08-10T05:13:25.927 回答
1

你应该阻止。它只会影响应用程序的“启动时间”,而不是“运行时间”。

  • 用于fs.readdirSync获取plugins目录下的所有文件
  • 将它们写成模块并且require()它们全部(require是同步的)
  • 将它们插入您的Server
于 2012-08-10T13:00:51.170 回答