Node.js插件的方法

首先

这是一种在Node.js中添加或修改模块而不修改主体程序的方法。通过允许以插件的形式进行添加,可以方便地在创建框架时添加功能而不修改主体代码,非常便利。

做法

目录结构

web/
 app.js
 plugin_loader.js
 /plugins
  /hello
   index.js

插件加载器

我将创建一个名称和实例生成的配对。

var fs = require('fs');
var scan = exports.scan = function(dir){
    var files = fs.readdirSync(dir);
    return files.filter(function(v){return fs.statSync([dir, v].join('/')).isDirectory()}).
        map(function(v){
            return {
                name : v,
                createInstance : require([dir, v].join('/')),
            }
        })
}

这个词语

我将创建一个机制,可以在主体部分调用插件的数组。
* 如果在Web等平台上,可以将页面名称放入URL中,并将页面名称作为插件名进行调用。

var pluginLoader = require('./plugin_loader');
var plugins = pluginLoader.scan(__dirname+'/plugins').reduce(function(r,v){
    r['/'+v.name] = v.createInstance;
    return r;
}, {});

var http = require('http');
var url = require('url');
http.createServer(function (request, response) {
    response.writeHead(200, {'Content-Type': 'text/html'});
    var urlinfo = url.parse( request.url , true );
    var f = plugins[urlinfo.pathname];
    if(f){
        f(request, response);
    }else{
        response.end();
    }
}).listen(8080);

插件

module.exports = function(request, response){
    response.write('hello world');
    response.end();
}

执行

node app.js

一旦启动,使用浏览器进行测试。

hello world

其他

我正在使用这个系统的机器人代理,示例是一个Web服务器。目前还没有出现问题,但如果有任何问题,请在评论中提出意见。