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服务器。目前还没有出现问题,但如果有任何问题,请在评论中提出意见。